我怎样才能像附图一样制作布局

How can I make a layout like the attached image

我正在尝试设计一个包含表单和几个项目的布局。但我发现很难把物品放在正确的地方。 在下图中,右边的框架是我打算设计的,左边的框架是我可以制作的。 这是右框架的代码:

public class GUI extends JFrame{


    public GUI(){
        JFrame frame = new JFrame("frame");
        frame.setSize(600, 600);

        JPanel panel = new JPanel(new BorderLayout());

        panel.add(new JLabel("Title"), BorderLayout.NORTH);

        JPanel formPanel = new JPanel(new GridLayout(1,2));
        panel.add(formPanel);
        TitledBorder formPanelTitle = BorderFactory.createTitledBorder("GridLayout(1,2)");
        formPanel.setBorder(formPanelTitle);

        //LEFT PANEL
        JPanel labelsPanel = new JPanel(new GridLayout(4,1));
        TitledBorder labelsPanelTitle = BorderFactory.createTitledBorder("GridLayout(4,1)");
        labelsPanel.setBorder(labelsPanelTitle);

        labelsPanel.add(new JLabel("Label 1"));
        labelsPanel.add(new JLabel("Label 2"));
        labelsPanel.add(new JLabel("Label 3"));
        labelsPanel.add(new JLabel("Label 4"));

        formPanel.add(labelsPanel);

        //RIGHT PANEL
        JPanel fieldsPanel = new JPanel(new GridLayout(4,1));
        TitledBorder fieldsPanelTitle = BorderFactory.createTitledBorder("GridLayout(4,1)");
        fieldsPanel.setBorder(fieldsPanelTitle);

        fieldsPanel.add(new JTextField("Label 1"));
        fieldsPanel.add(new JTextField("Label 2"));
        fieldsPanel.add(new JTextField("Label 3"));
        fieldsPanel.add(new JTextField("Label 4"));

        formPanel.add(fieldsPanel);

        //BOTTOM PANEL
        JPanel bottomPanel = new JPanel(new GridLayout(2,1));
        TitledBorder BottomPanelTitle = BorderFactory.createTitledBorder("GridLayout(2,1)");
        bottomPanel.setBorder(BottomPanelTitle);
        panel.add(bottomPanel, BorderLayout.SOUTH);

        JPanel buttonPanel = new JPanel(new FlowLayout());
        buttonPanel.add(new JButton("Browse"));
        buttonPanel.add(new JLabel("Label"));
        TitledBorder buttonPanelTitle = BorderFactory.createTitledBorder("FlowLayout()");
        buttonPanel.setBorder(buttonPanelTitle);
        bottomPanel.add(buttonPanel);

        JPanel secondButtonPanel = new JPanel(new GridLayout(1,2));
        secondButtonPanel.add(new JButton("Back"));
        secondButtonPanel.add(new JButton("Next"));
        TitledBorder secondButtonPanelTitle = BorderFactory.createTitledBorder("GridLayout(1,2)");
        secondButtonPanel.setBorder(secondButtonPanelTitle);
        bottomPanel.add(secondButtonPanel);

        frame.add(panel);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        // TODO code application logic here
        new GUI();

    }

}

我不确定代码是否真的是最优的,因为有很多内部面板并且太复杂了。我也不能把物品放在我想放的地方。有什么建议或想法可以让这个布局看起来更好吗?

  • 创建一个 JPanel,使用 GridBagLayout 并将您的 labels/fields 添加到其中,这形成了布局的 "center" 部分。
  • 创建一个 JPanel 并向其添加 Browse 按钮 JLabel。使用 GridBagConstraints#gridwidth 设置为 REMAINDER,将其添加到您的第一个面板
  • 创建一个JPanel,使用BorderLayout,将第一个面板添加到CENTER位置。将标题Label添加到NORTH位置,可能需要调整为horizontalAlignment属性
  • 使用 FlowLayout 创建一个 JPanel,与 RIGHT 对齐并向其添加 "Back" 和 "Next" 按钮。将其添加到上一个面板的 SOUTH 位置。

查看Laying Out Components Within a Container了解更多详情