java - 当 textarea 与其他组件一起使用时,为什么 Java pack 无法正确调整框架大小?

标签 java swing

我正在使用 GridLayout 创建一个 GUI 来排列使用 FlowLayout 的多个面板。我使用 pack 来确定框架的大小。如果我只有一个 TextArea 那么它的大小正确。如果我只有其他组件,它的大小正确。但是,如果我在面板下方的代码中同时使用 p1 和 p2,按钮的大小将不正确。我正在使用的测试代码如下。如果我只使用 p1 或 p2,它的大小会正确,但不能同时使用:这是我得到的图像。我不希望按钮和文本区域之间有多余的空间。 如果我单独做文本区域,它的大小会正确。: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);
    }

}

最佳答案

尺寸正确。 GridLayout 意味着所有单元格的大小都相同。由于文本区域比按钮大,因此您会在包含按钮的面板中看到额外的空间。

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

不需要使用 GridLayout 的“面板”。

您只需使用:

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

现在 p1 和 p2 将是正确的高度。

此外,确实不需要“p2”。您可以直接将滚动 Pane 添加到框架中。

关于java - 当 textarea 与其他组件一起使用时,为什么 Java pack 无法正确调整框架大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61377401/

相关文章:

java - Android目标文件损坏

java - 在 borderlayout 中使用 JPanel 错误打包 JFrame

java - 为什么 JTables 使 TableModel 在呈现时不可序列化?

java - 如何从静态上下文初始化重绘计时器?

java - 将文本字段添加到程序中

java - 具有 : remoting, 负载平衡、故障转移、依赖 DAG 的开源 Java Job Scheduler?

Java Math.min/max 性能

java - Java 中 DAO 中的外键

java - java 中的 mouseclicked 事件无法填充文本字段

java - 如何在 java 中显示 ms outlook 的通知,如弹出窗口?