2012-06-04 2 views
0

У меня есть эта (частично) псевдо кодпеременные и методы и actionlisteners

class a { 
    void b() 
    { 
    int d = 0; 
    JButton c = new JButton(); 
    c.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
     d = 1; 
     } 
    }); 
    } 
} 

Однако, это не работает, Eclipse предложил добавить окончательный идентификатор д, но это делает значение невозможно изменить. Извините, если это глупый вопрос, но сложно сформулировать вопрос для Google для чего-то вроде этого ... Я также не могу объявить переменную на рычаге выше метода b.

+1

Что вы на самом деле хотите делать с 'd'? Какую область вы ожидаете? – SirPentor

ответ

1

Возможно, вы захотите переместить объявление d за пределами метода.

class a { 
    int d = 0; 

    method b() { 
    JButton c = new JButton(); 
    c.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     d = 1; 
    } 
    } 

} 

.. и формат вашего кода.

+0

Вы ничего не можете изменить в b() из ActionListener. Вы должны переосмыслить свой код. –

+0

Я думал, прежде чем я не смог переместить переменную вне метода, но у меня только один из этих «эврика» моментов ... – Karlovsky120

1

Это происходит потому, что код:

c.addActionListener(new ActionListener() 
      { 
      public void actionPerformed(ActionEvent e) 
      { 
       d = 1; 
      } 
      });//a little corrected here 

На самом деле создает новый вложенный класс и overrides причем способ actionPerformed(ActionEvent e). Поскольку он не является частью того же класса, secure java не разрешает локальным переменным, отличным от объявленного final, к которому должен обращаться этот метод вложенного класса.