首页 文章

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

提问于
浏览
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);

这是一个截图

enter image description here

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

enter image description here

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

有人可以解释一下吗?谢谢

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);
    
    }
    

相关问题