1

我想知道我们能否有一个 JPanel,其布局不同于其父 JFrame。例如。如果我有带有边框布局的 JFrame,并且我们嵌入了一个 JPanel,并且它具有不同的布局。可能吗 ?

我正在努力做到这一点。但是这样 JPanel 的组件就没有显示出来。

问题来了:

我有一个 JFrame,它的布局是边框布局。我在这个框架上添加了一个 JPanel。如果我没有为 JPanel 设置任何布局。JPanel 的所有组件都显示在窗口上,但是当我为 JPanel 设置网格布局时,JPanel 的组件不可见。我正在向 JPanel 添加布局以对齐组件。下面是我的代码:

我有一个主类、一个框架类和 Jpanel 类。

    public class AppMain {

    public static void main(String[] args) {

        AppPage1 page1 = new AppPage1("test");
        page1.setVisible(true);
    }
}



public class AppPage1 extends JFrame {

    public AppPage1(String title) throws HeadlessException {

        super(title);
        this.setLayout(new BorderLayout());

        addWindowListener(new WindowAdapter() {

            public void windowOpened(WindowEvent e) {
                setExtendedState(MAXIMIZED_BOTH);
            }
        });

        //Panel for logo
        JLabel testLogo = new JLabel("");
        testLogo.setIcon(new javax.swing.ImageIcon("test.JPG"));
        List<JComponent> componentList = new ArrayList<JComponent>();
        componentList.add(testLogo);


        PagePanel logoPanel = new PagePanel(componentList,null);
        this.add(logoPanel, BorderLayout.NORTH);


        //Panel for Button and checkboxes
        JLabel panelTitle = new JLabel("test Wizard");
        JRadioButton rdButton_ExistingConfigurationFile = new JRadioButton("Existing Configuration File");
        JRadioButton rdButton_ConfigureNewPropertyFile = new JRadioButton("Configure new Property File");

        componentList = new ArrayList<JComponent>();
        componentList.add(panelTitle);
        componentList.add(rdButton_ExistingConfigurationFile);
        componentList.add(rdButton_ConfigureNewPropertyFile);

        PagePanel buttonPanel = new PagePanel(componentList,new GroupLayout(this));
        this.add(buttonPanel, BorderLayout.CENTER);

        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        validate();
    }
}



    public class PagePanel extends JPanel {

    public PagePanel(List<JComponent> componentList, LayoutManager layOutManager) {

        this.setBackground(Color.decode("#4E6987"));

        if (layOutManager != null) {
            this.setLayout(null);
        }
        for (JComponent jComponent : componentList) {

            jComponent.setBackground(Color.decode("#4E6987"));
            this.add(jComponent);
        }
    }
}

在此先感谢拉维库马尔

4

2 回答 2

0

问题是您设置了一个空布局管理器,而不是在您的PagePanel类中设置一个布局管理器。

if (layOutManager != null) {
    this.setLayout(null);
}

如果您设置null布局,则必须“手动”定位和调整组件的大小,因此请尽量避免这种情况并正确使用LayoutManager

这条线也没有意义:

PagePanel buttonPanel = new PagePanel(componentList,new GroupLayout(this));

GroupLayout 构造函数的参数应该是您设置布局的容器,而不是随机组件。

于 2012-06-19T06:28:58.680 回答
0

我可以写一个例子来证明这是完全可能的,但是 SO 已经有一个很好的“嵌套布局”例子,所以一个链接就足够了

于 2012-06-19T05:45:39.477 回答