当我尝试调用paintComponent时为什么会出现错误?

时间:2013-04-05 04:36:45

标签: java swing jbutton custom-component paintcomponent

我的名为UI的类扩展了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课程时。

为什么?

1 个答案:

答案 0 :(得分:1)

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

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

其次,Graphics g不是有效参数,而是减速。

结帐

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

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