Java JPanel不会出现在另一个JPanel中

Java JPanel不会出现在另一个JPanel中,java,swing,jpanel,layout-manager,Java,Swing,Jpanel,Layout Manager,在上面的代码中,innerPanel没有显示,也没有发生任何错误。知道如何显示outerPanel中的innerPanel吗?我尝试使用 getContentPane.addinnerPanel 但它不起作用。试着改变一下 class ABC extends JFrame { public JPanel createGUI() { JPanel outerPanel = new JPanel(); outerPanel.setLayout(null

在上面的代码中,innerPanel没有显示,也没有发生任何错误。知道如何显示outerPanel中的innerPanel吗?我尝试使用 getContentPane.addinnerPanel 但它不起作用。

试着改变一下

class ABC extends JFrame {
    public JPanel createGUI()
    {
        JPanel outerPanel = new JPanel();
        outerPanel.setLayout(null);

        JLabel top = new JLabel();
        top.setBounds(40,40,400,30);
        top.setText("Hello World");
        outerPanel.add(top);

        int l = getLength();
        JPanel innerPanel = new JPanel();
        if(l==0)
        {
            innerPanel.setLayout(null);
            JLabel empty = new JLabel("No Data Found");
            empty.setBounds(80,150,300,30);
            innerPanel.add(empty);
        }
        else
        {
            innerPanel.setLayout(new GridLayout(l,4,5,5)); 
            for(int i=0;i<l;i++)
            {
                innerPanel.add(new JLabel("Text1");
                innerPanel.add(new JLabel("Text2");

                JButton b1 = new JButton("Button1");
                innerPanel.add(b1);
                JButton b2 = new JButton("Button2");
                innerPanel.add(b2);
            }          
         }
         outerPanel.add(innerPanel);
         return outerPanel;
    }
}


或者完全删除setLayout调用。

我认为问题在于innerPanel的getPreferredSize==0,0。。。因为它里面什么都没有,所以如果直接添加到contentPane,它就不会被JPanel的默认布局管理器FlowLayout进行布局,outerPanel可能正在显示,因为在默认contentPane上调用add component将使用BorderLayout.center添加它。您甚至如何知道显示了什么和没有显示什么。您没有添加占用空间的视觉元素。您的标签是空的,没有设置边框,因此所有元素的大小都将为零。@markbernard在这里我添加了我认为可以提供解决方案的所需的最小代码。我在outerPanel和innerPanel中设置了可视元素,在其中outerPanel可以正确渲染。上下文之外的代码片段不是我将为我们提供足够的信息来帮助您,然后对您进行猜测。我刚刚添加了所需的最少代码—当您提出一个演示问题时,请发布一个适当的帖子。1代码没有编译。2你只需要在面板上添加一个组件,这样我们就知道你在做什么。虽然这是个好主意,但据我所知,OP无法知道面板是否实际可见,因为面板上没有添加任何可见的内容,因此即使这确实解决了问题,他们也不知道1+,但是,您可以去掉setLayoutnull语句。Swing设计用于布局管理器,JPanel的默认布局管理器是FlowLayout。
outerPanel.setLayout(null);
outerPanel.setLayout(new FlowLayout());