Java的。调整JPanel上的问题大小

时间:2012-07-24 20:59:41

标签: java swing layout

以下代码段允许我使用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);

这是截图

enter image description here

然而,踢球者是当我调整JFrame的大小时,“复制”按钮被放大但我希望放大JTextField,而复制和粘贴按钮保持相同的大小。这是一个更新的屏幕截图:

enter image description here

为了尝试修复它,我下载了NetBeans等并使用GUI设计器进行了游戏但是我无法解决它,即使使用不同的布局管理器也是如此。

有人能说些什么吗?感谢

1 个答案:

答案 0 :(得分: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);

}