java - GridBagLayout 组件无法正确显示

标签 java swing layout-manager gridbaglayout

我正在学习java swing,这对我来说很困惑。不显示退出按钮。但是,如果我将 textArea 的代码部分移到按钮的两部分之后,它将正确显示。那么为什么呢?

package exercise1;

import javax.swing.*;
import java.awt.*;

public class ChatClient {
    private JTextArea textArea;
    private JTextField textField;
    private JButton btnSend;
    private JButton btnQuit;
    private JFrame frame;
    private JPanel panel;
    private JScrollPane scrollPane;

    private void launchFrame() {
        panel = new JPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

        textArea = new JTextArea(10, 50);
        scrollPane = new JScrollPane(textArea);
        c.gridx = 0;
        c.gridy = 0;
        c.gridheight = 3;
        panel.add(scrollPane, c);

        btnSend = new JButton("Send");
        c.gridx = 1;
        c.gridy = 0;
        c.anchor = GridBagConstraints.NORTH;
        panel.add(btnSend, c);

        btnQuit = new JButton("Quit");
        c.gridx = 1;
        c.gridy = 1;
        c.anchor = GridBagConstraints.NORTH;
        panel.add(btnQuit, c);


    }

    protected ChatClient() {
        frame = new JFrame("Chat Room");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        launchFrame();
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        ChatClient client = new ChatClient();
    }
}

最佳答案

简单:添加 JScrollPane 后您忘记重置 c.gridheight = 1;。如果不这样做,发送按钮将覆盖退出按钮。

private void launchFrame() {
    panel = new JPanel(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    c.fill = GridBagConstraints.HORIZONTAL;  // ** This is also worthwhile **

    textArea = new JTextArea(10, 50);
    scrollPane = new JScrollPane(textArea);
    c.gridx = 0;
    c.gridy = 0;
    c.gridheight = 3;
    panel.add(scrollPane, c);

    btnSend = new JButton("Send");
    c.gridx = 1;
    c.gridy = 0;
    c.gridheight = 1;  // ********* ADD THIS *********
    c.anchor = GridBagConstraints.NORTH;
    panel.add(btnSend, c);

    btnQuit = new JButton("Quit");
    c.gridx = 1;
    c.gridy = 1;
    c.anchor = GridBagConstraints.NORTH;
    panel.add(btnQuit, c);

}

关于java - GridBagLayout 组件无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57834918/

相关文章:

java - 无法检索 unitName 的 EntityManagerFactory

java - 覆盖绘制而不扩展 JFrame

java - 在 Swing 中使用 GridLayout 时设置框架大小

java - 如何让 JFrame 自动调整大小以显示所有按钮

java - Android:格式化独立月份

java - 如何在 Java 中将整数添加到 char 中?

java - 创建另一个窗口只显示文本 + Swing

java - 哪个布局管理器用于嵌套表格布局

java - 将 Bufferedreader 的输出打印到 TextView

java - 通过文本字段更新 JTable 内容