我可以使用哪些布局来获取我想要的GUI?

时间:2017-01-03 04:48:39

标签: java swing layout jpanel grid-layout

我完全不知道应该使用哪些布局来创建我想要的GUI程序。

在左侧,我希望我的面板上有三个按钮,垂直向下。在右侧,我将有另一个面板,它将是我的主面板,其中显示所有信息,具体取决于按下的按钮。

我完全不知道应该使用哪种布局,而且我完全不知道如何让我的GUI看起来像这样:enter image description here

此处是我的代码:

        public void addComponentsToPane(Container pane) {

        JPanel innerPane = new JPanel();
        JPanel outerPane = new JPanel();
        outerPane.setBackground(Color.yellow);

        pane.setLayout(new GridBagLayout());

        JButton btnAdd = new JButton("Add");
        JButton btnEdit = new JButton("Edit");
        JButton btnMovements = new JButton("Movements");

        innerPane.add(btnAdd, BorderLayout.NORTH);
        innerPane.add(btnEdit, BorderLayout.CENTER);
        innerPane.add(btnMovements, BorderLayout.SOUTH);

        pane.setLayout(new GridLayout(1,2));
        pane.add(innerPane);
        pane.add(outerPane);
    }

返回此内容:

enter image description here

正如你所看到的,它看起来并不像我想要的那样,我不知道该怎么做。

我的按钮不正确,我可能以错误的方式接近这个。

我的问题是,我怎样才能以正确的方式解决这个问题,因为我可以用正确的布局创建一个GUI,让它看起来像第一张图片?

谢谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,JFrame的内容窗格使用BorderLayout。我会保持这种布局。

然后创建一个“左”面板并将其添加到BorderLayout.LINE_START。该区域将包含您的按钮。然后,您可以将此面板的布局管理器设置为GridBagLayout。使用GridLayout创建第二个面板,组件垂直对齐。将按钮添加到此面板。使用以下方法将此面板添加到“左侧”面板:

leftPanel.add(buttonPanel, new GridBagConstraints); 

然后创建另一个面板并将其添加到BorderLayout.CENTER。这是你的彩色面板。

所以基本逻辑是:

JPanel buttonPanel = new JPanel( new GridLayout(...) );
buttonPanel.add(...);

JPanel leftPanel = new JPanel( new GridBagLayout() );
leftPanel.add(buttonPanel, new GridBagConstraints());

JPanel centerPanel = new JPanel();
center.setBackground( Color.YELLOW );

frame.add(leftPanel, BorderLayout.PAGE_START);
frame.add(centerPanel, BorderLayout.CENTER);

如果您希望按钮大于默认值,那么您可以执行以下操作:

button.setMargin( new Insets(20, 20, 20, 20) );

阅读Layout Managers上的Swing教程,了解每个布局管理器的更多信息和示例。

如果您想在包含按钮的面板上留出额外空间,则需要使用EmptyBorder。 Swing教程还包含How to Use Borders部分,您可以阅读工作示例。

尝试并学习嵌套面板以获得所需效果。