将JLayeredPane添加到JPanel

我正在尝试将JLayeredPane添加到JPanel,然后将图像(JLabel图标)和按钮添加到JLayeredPane,但都不显示。 我已经测试了没有按钮和分层窗格的图像,所以我知道它有效。 这是我正在使用的一些代码。 有什么我遗失或做错了吗?

public class MyClass extends JPanel { private JLayeredPane layeredPane; private JLabel imageContainer = new JLabel(); private JButton info = new JButton("i"); MyClass(ImageIcon image) { super(); this.imageContainer.setIcon(image); this.layeredPane = new JLayeredPane(); layeredPane.setPreferredSize(new Dimension(300, 300)); layeredPane.add(imageContainer, new Integer(50)); layeredPane.add(info, new Integer(100)); this.add(layeredPane); } } 

从教程

默认情况下,分层窗格没有布局管理器。 这意味着您通常必须编写用于定位和调整放置在分层窗格中的组件的代码。

查看代码更改:

 import java.awt.*; import javax.swing.*; public class MyClass extends JPanel { private JLayeredPane layeredPane; private JLabel imageContainer = new JLabel(); private JButton info = new JButton("i"); MyClass(ImageIcon image) { super(); this.imageContainer.setIcon(image); this.layeredPane = new JLayeredPane(); layeredPane.setPreferredSize(new Dimension(300, 300)); layeredPane.add(imageContainer, new Integer(50)); layeredPane.add(info, new Integer(100)); this.add(layeredPane); // CHANGED CODE // Manually set layout the components. imageContainer.setBounds( 0, 0, image.getIconWidth(), image.getIconHeight() ); info.setBounds( 200, 00, 50, 40 ); } public static void main( String [] args ) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.add( new MyClass( new ImageIcon("logo.png") ) ); frame.pack(); frame.setVisible( true ); } } 

补充笔记:

1)最好(在我看来)将开口支架放在同一条线上。 这就是大多数Java代码的样子。

2)如果您没有真正创建子类,请避免inheritanceJPanel(或任何其他组件)。 您可以直接使用它而无需inheritance(除非您确实在创建新组件。

默认情况下,JLayeredPane具有空布局管理器,因此在您的示例中,您需要设置子组件的位置和大小。 您可以在JLayeredPane上设置布局管理器,但这很可能会否定我猜测您想要的分层渲染,因为您正在使用分层窗格。