Java 在另一个JLabel上显示一个JLabel
我有以下代码:Java 在另一个JLabel上显示一个JLabel,java,swing,jlabel,Java,Swing,Jlabel,我有以下代码: try { File file_background = new File( "C:\\Users\\xxxx\\Desktop\\background.png"); ImageIcon icon_background = new ImageIcon( ImageIO.read(file_background)); JLabel background = new JLa
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();
}
我试图让汽车标签显示在背景标签的顶部。但我只看到了杰拉贝尔的背景。我是SWING新手,所以任何关于我缺少哪些步骤的建议都非常有用。有效。。添加了以下内容以使其显示:
car.setBounds(200, 200, 200, 200);
显然,这是因为默认情况下使用了空布局管理器。因此,设置标签的边界将使其能够显示,因为默认大小为0。将它们都添加到使用的JPanel中。将一个
JLabel
添加到另一个JLabel
是不正常的
这段代码还没有经过编译器的编译,所以请接受它:)
…我想把它移到后面的阶段。但现在我希望它首先显示:)
有两种方式,
第一。
- 使用
,而不是paintComponent
,将JLabel background
放置到JLabel car
,绘制一幅JPanel
(advantage图像
是带有JPanel
适当通知的容器)LayoutManager
- 将
放入JLabel-car
,但JLabel-background
尚未实施任何JLabel
,必须设置所需的设置LayoutManager
- 优点
中的所有图像都是静态的,与JLabel
相比,CPU和GPU的输入ad消耗为零李>paintComponent
- 缺点
不是容器,对于JLabel
有适当的通知,需要一些代码,而且与LayoutManager
放在JLabel
中相比,对于移动(绝对布局)是非常好的解决方案JPanel
使用绘制两幅
图像
您是否尝试过使顶部的标签不不透明?取决于问题,您想使用JLabel car
?,还是此图是透明的static@mre很高兴再次在这里见到你是的,我想晚一点再搬。但现在我想让它先显示:)@mre-试过了。没有做任何事情您能解释一下为什么将一个JLabel添加到另一个JLabel是不合适的吗?感谢查看JPanel的文档。它被设计为包含其他JComponent(JLabel是一个JComponent)。JLabel间接继承了Container,Container是一个AWT组件,设计用于包含其他AWT组件。这是令人困惑的,但我想如果你不使用JPanel,你会遇到一些类似于你刚才所做的(布局不工作)的问题。因此,您希望我将它们都从JLabel更改为JPanel,然后使用OverlyLayout,以便一个显示在另一个上?+1,用于逐OverlyLayout布局JLabel,但这是在JLabel中放置JLabel的一个很好的理由,这里有一个OverlayLayout
示例。默认的布局管理器从来都不是空的布局管理器……您必须在某个地方明确地设置它,我强烈建议您进行更改。
JPanel panel = new JPanel(new OverlayLayout());
panel.add(background);
panel.add(car);