为什么当textarea和其他组件一起使用时,Java包不能正确地调整框架的大小?

问题描述 投票:0回答:1

我正在使用GridLayout创建一个图形用户界面,以安排多个使用FlowLayout的面板。 我使用pack来确定框架的大小。 如果我只有一个TextArea,那么它的大小就会正确。 如果我只有其他组件,那么它的大小就会正确。 但是如果我在下面的代码中同时使用p1和p2,那么带有按钮的面板的大小就不会正确。 我正在使用的测试代码如下。 如果我只使用p1或p2,它的大小是正确的,但不与两个。 这是我得到的图片 我不希望在按钮和文本框之间有多余的空间。 如果我只用textarea,它的大小是正确的。 enter image description here

public class GUIPractice extends JFrame
{
    //declare GUI objects
    JPanel panel;
    JPanel p1, p2;
    JButton btnAdd, btnShow;
    JScrollPane js;
    JTextArea taOutput; 

    //constructor
    public GUIPractice()
    {
        //give frame a title
        setTitle("GUI Practice");
        panel =new JPanel(new GridLayout(0, 1));
        btnAdd = new JButton("Add");
        btnShow = new JButton("Show");
        taOutput = new JTextArea(10, 20);
        js = new JScrollPane(taOutput, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
                    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        p1 = new JPanel();
        p1.add(btnAdd);
        p1.add(btnShow);

        p2 = new JPanel();
        p2.add(js);

        panel.add(p1);
        panel.add(p2);

        //add the panel to the frame
        add(panel);
    }

    public static void main(String[] args) 
    {
        GUIPractice frame = new GUIPractice();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

}
java swing
1个回答
0
投票

它的大小是正确的。框的 GridLayout 意味着所有单元格的大小都是一样的。由于文本区域比按钮大,你会看到包含按钮的面板有额外的空间。

我建议你只使用默认的 BorderLayout 的框架。

你的 "面板 "不需要使用GridLayout。

你只要使用。

add(p1, BorderLayout.PAGE_START);
add(p2, BorderLayout.CENTER);

现在p1和p2就会有合适的高度了。

另外,真的不需要 "p2"。你可以直接将滚动面板添加到框架中。

© www.soinside.com 2019 - 2024. All rights reserved.