java - 将 JComponent 添加到 JPanel 并将 JPanel 添加到 JFrame 不起作用

标签 java swing

我有一个 JFrame,我想添加一个带有 JButton 的 JPanel。但互联网上的所有指南似乎都是错误的。如果我按照这些说明操作,我的按钮将不会显示。

我知道有一些与我类似的问题,但这些帖子的代码太多,而不是孤立代码中的问题。所以我无法从中找出他们的解决方案是什么。

public class MainClass {
    public static void main (String[]args) {
        Frame frame = new Frame();
    } 
}

public class Frame extends JFrame {

    private JButton btn;
    private JPanel pnl = new JPanel();

    Frame () {
        setSize(400,400);
        setLayout(new FlowLayout());
        setVisible(true);
        setButtons();
        add(pnl);
    }

    private void setButtons() {
        btn = new JButton();
        pnl.add(btn);
    }
}

最佳答案

    setVisible(true);
    setButtons();
    add(pnl);

您的组件的大小为 (0, 0),因此无需绘制任何内容。

解决方案是在将所有组件添加到框架后使框架可见:

    setButtons();
    add(pnl);
    setVisible(true);

当您使框架可见或使用 pack() 方法时,布局管理器将被调用,以便知道组件将具有大小/位置。

but these posts have too much code instead of the problem in an isolated code.

我建议您从 Swing Tutorial 中的代码示例开始Swing 基础知识。下载示例并将其用作结构更好的类(class)的起点。例如,所有 Swing 组件都应在事件调度线程 (EDT) 上创建。

关于java - 将 JComponent 添加到 JPanel 并将 JPanel 添加到 JFrame 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59374210/

相关文章:

Java按钮事件调用另一个类中的方法

Java Swing 动态网格

swing - Switch 语句有问题吗?

java - 我对 java 和 c++ 之间的 "reference"感到困惑

java - 创建访客 session

java - 带有 jib 的 JRE 版本 (Docker)

Java - 使复选框停用 JTextField

java - 当我只能使用打印方法时,为什么 PrintWriter 经常与 FileOutputStream 一起使用

java - flyway 中 baseline 和 baselineOnMigrate 之间的区别?

java - KeyBindings 和 KeyListeners 之间的区别