我目前正在尝试创建一个程序,用键盘键在背景图像上移动一个矩形。我面临的问题是,当我绘制组件时,它们只是简单地放在一起,而不是放在背景图像上的正方形。下面是显示这两个组件的代码;
    JLayeredPane panel = new JLayeredPane();
    panel.setLayout(new FlowLayout());
    add(panel);
    paintBackground pb = new paintBackground(bimg);
    panel.add(pb, 1, 0);
    paintPlayer cc = new paintPlayer(startX, startY);
    panel.add(cc, 2, 0);
    pack();
    setVisible(true);我认为问题在于paintPlayer组件被设置为全尺寸,并且似乎有一个背景。paintPlayer组件代码如下所示:
public Dimension getMinimumSize() {
    return new Dimension(800,600);
}
@Override
public Dimension getPreferredSize() {
    return new Dimension(800,600);
}
@Override
public Dimension getMaximumSize() {
    return new Dimension(800,600);
}
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.red);        
    System.out.println(startX + startY );
    g.fillRect(startX, startY, 30, 30);
}我尝试将组件大小设置为矩形的大小,但这样我就不能使用fillRect中的前两个值来移动矩形。由组件(800x600)填充的其余空间的背景似乎是不透明的。
添加组件时,组件就会在彼此旁边显示,比如:https://gyazo.com/57245c518e02778c36ffc89ba75d5a81。如何将paintPlayer添加到paintBackground的顶部,使其只覆盖背景图像上的矩形。
我做了相当多的搜索,但我似乎找不出答案。可能和布局有关吧?我注意到的另一件事是,通过这样做,框架或窗格都不会受益于setBackground,因为它是不可见的。为任何帮助干杯。
发布于 2016-10-12 18:16:07
这是JLayerdPane的默认构造函数。
public JLayeredPane() {
    setLayout(null);
}您可以看到它使用的是正常的AbsolutLayout。如果你读到这里
注意:这些层只是一个逻辑构造,LayoutManagers将影响该容器的所有子组件,而不考虑层设置。
你应该明白是怎么回事。检查OverlapLayout。
https://stackoverflow.com/questions/40005151
复制相似问题