1

我的班级名为UIextends RoundButton,如下所示:

public class RoundButton extends JButton {

    public RoundButton(String label) {
        super(label);
        this.setContentAreaFilled(false);
        Dimension size = this.getPreferredSize();
        size.height = size.width = Math.max(size.height, size.width);
        this.setPreferredSize(size);
    }

    @Override
    protected void paintComponent(Graphics g) {
        if(!GameState.getIfComplete()) { // If the game is not complete or has just started
            this.setBorder(null);
            g.setColor(Color.BLACK);
            g.fillRect(0, 0, this.getSize().width, this.getSize().height);
            if(this.getModel().isArmed()) {
               g.setColor(Color.RED);
            }else {
                g.setColor(Color.GREEN);
            }
            g.fillOval(0,0,this.getSize().width-1,this.getSize().height-1);
            super.paintComponent(g);
        }else {
            this.setBorder(null);
            g.setColor(Color.BLACK);
            g.fillRect(0, 0, this.getSize().width, this.getSize().height);
            if(this.getModel().isArmed()) {
               g.setColor(Color.BLUE);
            }else {
                g.setColor(Color.BLUE);
            }
            g.fillOval(0,0,this.getSize().width-1,this.getSize().height-1);
            super.paintComponent(g); 
        }
    }
}

里面UI有一个名为的方法disableAllButtons,如下所示:

public void disableAllButtons() {
    int count =0 ;
    while(count <= buttons.length-1) {
        buttons[count].setEnabled(false);
        buttons[count].paintComponent(Graphics g); // GENERATES AN ERROR
        // where buttons[count] = new RoundButton()
        count++;  
    }
}

从我尝试调用的这种方法中,我在课堂上paintComponent覆盖了。RoundButton但我得到一个错误:

')' expected
';' expected
 not a statement
 cannot find symbol
 symbol: variable Graphics
 location: class UI

当我导入java.awt.Graphics课程时。

这是为什么 ?

4

1 回答 1

1

看电话buttons[count].paintComponent(Graphics g)...

首先,你永远不应该给paintComponent自己打电话,你应该让它RepaintManager处理。改为使用repaint

其次,Graphics g不是一个有效的参数,它是一个减速。

查看

有关 Swing 和绘画的详细信息。

另外......在你的绘画方法中调用this.setBorder(null);是一个非常非常糟糕的主意。这将触发一个新的重绘请求,一遍又一遍地发布在事件调度线程上……你明白了。它会消耗你的CPU

于 2013-04-05T04:41:06.603 回答