如何使用BorderLayout安排组件?

时间:2018-03-20 20:46:07

标签: java swing jpanel layout-manager border-layout

我试图让我的GUI显示为:

Grocery Cart [Refill]
    (TextArea)

我目前正在使用BorderLayout,我想坚持下去。如何在同一JLabel期间获取JButtonJPanel下方的文字区域?这是我特定区域的代码:

如何在两个并排下方添加文本框?每当我添加它时,它就会紧挨着它们。

JPanel newPanel = new JPanel();

JLabel label = new JLabel("Grocery Cart");
label.setFont(new Font("Arial", Font.BOLD, 20));
newPanel.add(label);
contentPane.add(newPanel, BorderLayout.WEST)        ;
JButton btnNewButton = new JButton("Refill");
btnNewButton.setFont(new Font("Tahoma", Font.PLAIN, 20));
btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
    }
});
newPanel.add(btnNewButton);

1 个答案:

答案 0 :(得分:1)

如果我的理解是正确的,那么您需要做什么:

    JPanel mainPanel = new JPanel(new BorderLayout());
    JPanel eastPanel = new JPanel(new BorderLayout());
    JTextArea area = new JTextArea("Test content");
    JLabel label = new JLabel("Grocery Cart");
    label.setFont(new Font("Arial", Font.BOLD, 20));

    mainPanel.add(label, BorderLayout.WEST);

    JButton btnNewButton = new JButton("Refill");
    btnNewButton.setFont(new Font("Tahoma", Font.PLAIN, 20));
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
        }
    });

    eastPanel.add(btnNewButton, BorderLayout.WEST);
    eastPanel.add(area, BorderLayout.CENTER);

    mainPanel.add(eastPanel, BorderLayout.CENTER);

    contentPane.add(mainPanel, BorderLayout.NORTH);

主要思想是,为了构建具有简单布局类型(如边框和流)的复杂布局,您必须使用容器层次结构,并通过流和边框布局的组合获得创意。

在我的示例中,标签和按钮不可调整大小,并且其宽度始终等于其首选宽度。然而,文本区域可以调整大小并占用其容器的剩余宽度。

请注意,添加到mainPanel的所有组件都可以垂直调整大小。为了使mainPanel保持其首选高度,您可以将它放在contentPane的BorderLayout.NORTH或SOUTH上。