【问题标题】:Components don't show up after painting绘制后组件不显示
【发布时间】:2015-04-04 18:41:10
【问题描述】:

我正在尝试绘制背景,然后将按钮放在面板上。如果没有paint 方法,按钮会正确放置在屏幕上,但是当有paint 方法时,按钮不会显示,直到鼠标悬停在它们上面。我不明白为什么会这样。谢谢

这是在构造函数中:

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)
}

【问题讨论】:

    标签: java swing graphics jbutton paint


    【解决方案1】:

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

    阅读 A Closer Look at the Painting Mechanism 上的 Swing 教程部分了解更多信息。

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

    代码应该是:

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

    【讨论】:

    • 好吧,这是有道理的,我正在努力学习更多关于使用绘画的知识,我会读一读。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多