为什么我的组件彼此相邻出现?
Why do my components appear next to each other?
我目前正在尝试创建一个程序,使用键盘键在背景图像上移动一个矩形。我面临的问题是,当我绘制组件时,它们只是彼此相邻放置,而不是覆盖背景图像的正方形。这是显示这两个组件的代码;
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) 填充的其余 space 的背景似乎是不透明的。
添加后,组件只是并排显示,如下所示:https://gyazo.com/57245c518e02778c36ffc89ba75d5a81。如何将 paintPlayer 添加到 paintBackground 之上,使其仅覆盖背景图像上的矩形。
我已经进行了相当多的搜索,但似乎无法解决。也许与布局有关?我注意到的另一件事是,通过这样做,框架或窗格都不会从 setBackground 中受益,因为它是不可见的。
为任何帮助干杯。
这是 JLayerdPane 的默认构造函数。
public JLayeredPane() {
setLayout(null);
}
你看它使用正常的 AbsolutLayout。如果你阅读 here:
Note: that these layers are simply a logical construct and LayoutManagers will affect all child components of this container without regard for layer settings.
你应该明白哪里不对了。检查 OverlapLayout.
我目前正在尝试创建一个程序,使用键盘键在背景图像上移动一个矩形。我面临的问题是,当我绘制组件时,它们只是彼此相邻放置,而不是覆盖背景图像的正方形。这是显示这两个组件的代码;
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) 填充的其余 space 的背景似乎是不透明的。
添加后,组件只是并排显示,如下所示:https://gyazo.com/57245c518e02778c36ffc89ba75d5a81。如何将 paintPlayer 添加到 paintBackground 之上,使其仅覆盖背景图像上的矩形。
我已经进行了相当多的搜索,但似乎无法解决。也许与布局有关?我注意到的另一件事是,通过这样做,框架或窗格都不会从 setBackground 中受益,因为它是不可见的。 为任何帮助干杯。
这是 JLayerdPane 的默认构造函数。
public JLayeredPane() {
setLayout(null);
}
你看它使用正常的 AbsolutLayout。如果你阅读 here:
Note: that these layers are simply a logical construct and LayoutManagers will affect all child components of this container without regard for layer settings.
你应该明白哪里不对了。检查 OverlapLayout.