Java 将一个JLabel/ImageIcon放置在另一个JLabel/ImageIcon的顶部

Java 将一个JLabel/ImageIcon放置在另一个JLabel/ImageIcon的顶部,java,imageicon,Java,Imageicon,我正在尝试创建我自己的小平台,我遇到的问题是将角色放到屏幕上。如何加载背景是通过使用BuffereImage将png放到屏幕上。我将BuffereImage转换为ImageIcon并添加到屏幕上。 像这样: File f = new File("Path Of File"); BufferedImage d = ImageIO.read(f); JLabel l = new JLabel(new ImageIcon(d)); c.gridx = tile; // Tile is set to t

我正在尝试创建我自己的小平台,我遇到的问题是将角色放到屏幕上。如何加载背景是通过使用BuffereImage将png放到屏幕上。我将BuffereImage转换为ImageIcon并添加到屏幕上。 像这样:

File f = new File("Path Of File");
BufferedImage d = ImageIO.read(f);
JLabel l = new JLabel(new ImageIcon(d));
c.gridx = tile; // Tile is set to the corresponding position on an int array
c.gridy = line; // ^^ So is line
c.insets = new Insets(0, 0, 0, 0);
panel.add(l, c);
我想做的是,把角色的图像放在一块瓷砖上。 以下是我努力工作的一个例子:

File f = new File(cPath);
    BufferedImage c1 = ImageIO.read(f);
    JLabel l = new JLabel(new ImageIcon(c1));
    l.setLocation(x, y);
    p2.add(l);`
p2是一个JPanel。布局设置为空:

p2.setLayout(null);
面板是一个JPanel。创建布局时,该布局将转换为GridBagLayout:

JPanel panel = new JPanel(new GridBagLayout());
两个面板都添加到JFrame中,如下所示:

frame.getContentPane().add(panel, BorderLayout.NORTH);
frame.getContentPane().add(p2);
因此,如果有人能让我知道如何将JLabel/ImageIcon放在另一个JLabel/ImageIcon上,我将不胜感激


编辑:如果您对我试图实现的目标有任何疑问,请告诉我。

默认情况下,组件的大小为(0,0)

因此,如果使用空布局,则需要负责设置添加到父标签的每个标签的大小

因此,基本逻辑是:

JLabel child = new JLabel( new ImageIcon() );
child.setSize( child.getPreferredSize() );
child.setLocation(...);
JLabel parent = new JLabel( new ImageIcon(...) );
parent.add( child );
frame.add( parent );
或者另一个选项是使用布局管理器。例如,可以使用以下方法将子对象居中放置在父对象上:

parent.setLayout( new GridBagLayout() );
parent.add(child, new GridBagConstraints());

现在,无需处理子对象的大小/位置,因为布局管理器将处理此问题。

为ImageIcon创建父对象时,我会将其与子对象的相同还是不同?而且我从不尝试将标签添加到其他标签。我试图在标签上添加图像图标。@PlasmaFighter\我不明白你的问题。试试代码。将“父级”标签想象成一个“面板”。您知道如何将零部件添加到配电盘中,因此所不同的是将零部件添加到标签中。