组件在涂漆后不显示



我正在尝试绘制背景,然后在面板上放置按钮。在没有绘制方法的情况下,按钮会正确地显示在屏幕上,但当使用绘制方法时,直到鼠标悬停在按钮上,按钮才会显示。我不知道为什么会这样。谢谢

这是在构造函数中:

setBorder(new EmptyBorder(40, 40, 40, 40));
setSize(1600, 1000);
setLayout(new GridLayout(4, 0, 40, 40));
for(int r = 0; r < rows; r++){
        for(int c = 0; c < cols; c++){
            levels[r][c] = new JButton(String.valueOf(levelNum));
            levels[r][c].setMargin(new Insets(50, 50, 50, 50));
            levels[r][c].addActionListener(e);
            levels[r][c].setBackground(Color.MAGENTA);
            this.add(levels[r][c]);
            levelNum++;
        }
}

然后是:

@Override
public void paint(Graphics g){
    g.setColor(Color.CYAN);
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    ... (just some basic fillRect()'s and things)
}

因为不调用super.paint(g),所以不会绘制子组件。

有关详细信息,请阅读Swing教程中关于"仔细观察绘画机制"的部分。

但是,无论如何都不应该覆盖paint()。自定义绘制是通过覆盖paintComponent()方法来完成的。

代码应该是:

public void paintComponent(Graphics g)
{
    super.paintComponent(...);
    ...

相关内容

  • 没有找到相关文章

最新更新