java - JPanel 只显示矩形而不显示 JButton

标签 java swing jpanel jbutton paintcomponent

void setUpGUI() {
    JFrame frame = new JFrame();
    frame.setContentPane(new Board());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setVisible(true);
}

class Board extends JPanel {
    @Override
    public void paintComponent(Graphics g) {
        setLayout(new GridLayout(10, 9));
        JButton b = new JButton("hello");
        add(b);
        g.setColor(Color.orange);
        g.fillRect(20, 50, 100, 100);
    }
}

出于某种原因,代码只显示了矩形,没有显示 JButton。我究竟做错了什么?谢谢!

最佳答案

paintComponent() 方法仅用于绘画。您永远不会在绘画方法中创建组件并将其添加到面板。删除该代码。

还在方法的开头添加一个super.paintComponent()

要将组件添加到面板,您可以执行以下操作:

Board board = new Board();
board.setLayout(...)
board.add(...);

或者在板类的构造函数中,您可以设置布局和添加组件。

关于java - JPanel 只显示矩形而不显示 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17397187/

相关文章:

java - 尝试获取《纽约时报》页面时,使用 GAE 的 URLFetchService 返回 null

java - 间隔后在 Swing JComponent 中重新绘制

java - 使用私有(private) setter 或在构造函数中工作

java - 无法解析配置 ':compileClasspath' 的所有文件

Java调试: make sure that exception is written at correct place with System. out.println()

java - 使添加的 JPanel 在父 JPanel 中可见

Java JApplet - 尝试切换在外部类中创建的 JPanel

java - 删除 Miglayout 中父容器边框的间隙

java - 如何在Java中取消鼠标点击事件

java - JFrame 内的 JPanel