我有以下代码:
try {
File file_background = new File(
"C:\\Users\\xxxx\\Desktop\\background.png");
ImageIcon icon_background = new ImageIcon(
ImageIO.read(file_background));
JLabel background = new JLabel(icon_background);
window.setContentPane(background);
File file_car = new File(
"C:\\Users\\xxxxxx\\Desktop\\car.png");
ImageIcon icon_car = new ImageIcon(ImageIO.read(file_car));
JLabel car = new JLabel(icon_car);
car.setVisible(true);
background.add(car);
// TODO Get car showing on top of the background label
} catch (IOException e) {
e.printStackTrace();
}
我试图在背景标签的TOP上显示汽车标签。但我只是得到了JLabel的背景。我是SWING的新手,所以对我错过的步骤的任何建议都会很棒。
答案 0 :(得分:4)
..我想把它搬到后期。但是现在我希望它首先显示:)
有两种方法,
将JLabel car
放到JPanel
,使用Image
绘制paintComponent
,而不是JLabel background
(优势JPanel
是容器正确通知LayoutManager
)。
将JLabel car
置于JLabel background
,但JLabel
未实施任何LayoutManager
,必须设置所需内容。
JLabel
中的所有图片都是静态的,与paintComponent
相比,CPU和GPU的广告消费量为零。 JLabel
不是容器,并且LayoutManager
有适当的通知,与位于JLabel
的{{1}}相比,需要一些代码段,用于移动(AbsoluteLayout) )是非常好的解决方案。使用BufferedImage and Graphics绘制JPanel
。
答案 1 :(得分:2)
将它们添加到使用OverlayLayout的JPanel。将JLabel
添加到另一个JLabel
。
此代码尚未通过编译器,因此请将其视为原样:)
JPanel panel = new JPanel(new OverlayLayout());
panel.add(background);
panel.add(car);
答案 2 :(得分:0)
Works ..添加以下内容使其显示:
car.setBounds(200, 200, 200, 200);
显然这是因为默认使用null布局管理器。因此,设置标签的边界将使其能够显示,因为默认大小为0。