2013-04-05 15 views
1

Мой класс с именем UI расширяет RoundButton, который выглядит следующим образом:Почему я получаю сообщение об ошибке, когда пытаюсь вызвать paintComponent?

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 I overrode in RoundButton класс. Но я получаю сообщение об ошибке:

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

при импорте java.awt.Graphics класс.

Почему?

ответ

1

Посмотрите на вызов buttons[count].paintComponent(Graphics g) ...

Прежде всего, вы должны НИКОГДА называть paintComponent себя, вы должны позволить RepaintManager сделку с ним. Вместо этого используйте repaint.

Во-вторых, Graphics g не является допустимым параметром, это замедление.

Заканчивать

Для получения подробной информации о свинге и живописи.

Также ... вызов this.setBorder(null); внутри вас метод краски - действительно, очень плохая идея. Это вызовет новый запрос на перерисовку, который будет размещен в Диспетчерской теме событий снова и снова и снова ... вы получите эту идею. Он будет потреблять вас. CPU

Смежные вопросы