我正在尝试创建一个程序,使用键盘键在背景图像上移动矩形。我面临的问题是,当我绘制组件时,它们只是彼此相邻放置,而不是覆盖背景图像的方形。这是显示两个组件的代码;
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。如何在paintBackground上添加paintPlayer,以便它只覆盖背景图像上的矩形。
我做了很多搜索,但我似乎无法解决这个问题。也许与布局有关?我注意到的另一件事是,通过这样做,框架或窗格都不会受益于setBackground,因为它不可见。 欢呼任何帮助。
答案 0 :(得分:1)
这是JLayerdPane的默认构造函数。
public JLayeredPane() {
setLayout(null);
}
你看它使用了normaly AbsolutLayout。如果您阅读here:
注意:这些图层只是一个逻辑结构,而LayoutManagers将影响此容器的所有子组件,而不考虑图层设置。
你应该明白什么是错的。检查OverlapLayout。