1

下面的代码片段允许我使用 BorderLayout Manager 在 JPanel 上放置一个 JTextfield 和 2 个 JButton。

        JPanel strPanel = new ButtonPanel();
        strPanel.setLayout(new BorderLayout());
        setBorder( new EmptyBorder( 3, 3, 3, 3 ) );

        strfield = new JTextField("",70);
        strPanel.add("West", strfield);
        strPanel.add("Center", btnCopy);
        strPanel.add("East", btnPaste);
        add("North", strPanel);

这是一个截图

在此处输入图像描述

但是,更重要的是,当我调整 JFrame 的大小时,“复制”按钮被放大,但我希望 JTextField 被放大,而复制和粘贴按钮的大小保持不变。这是更新的屏幕截图:

在此处输入图像描述

为了尝试修复它,我下载了 NetBeans 等并与 GUI 设计器一起玩,但我无法解决它,即使使用不同的布局管理器。

有人可以阐明一下吗?谢谢

4

1 回答 1

6

BorderLayout不适合此任务,因为它为CENTER组件提供了所有剩余空间。如果您可以将布局更改为,GridBagLayout则很容易将最左侧的组件全部剩余空间。

例子:

public static void main(String[] args) {

    JFrame frame = new JFrame("Test");
    frame.setLayout(new GridBagLayout());

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 1;

    frame.add(new JTextArea("Hello World!"), gbc);

    gbc.weightx = 0;
    frame.add(new JButton("Copy"), gbc);
    frame.add(new JButton("Paste"), gbc);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

如果你真的想使用BorderLayout,你可以将按钮组合在一起并将它们添加到东部,将文本字段添加到中心,执行以下操作:

public static void main(String[] args) {

    JFrame frame = new JFrame("Test");

    frame.add(new JTextArea("Hello World!"), BorderLayout.CENTER);
    frame.add(new JPanel(new GridLayout(1, 0)) {{
        add(new JButton("Copy"));
        add(new JButton("Paste"));
    }}, BorderLayout.EAST);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);

}
于 2012-07-24T21:03:03.937 回答