Объект не может быть разрешен
Вопрос
У меня есть этот код:
public class Window extends JFrame {
public Window(){
...
JButton button = new JButton("OK");
getContentPane().add(button);
ButtonHandler handler = new ButtonHandler();
button.addActionListener(handler);
...
}
private class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent event){
if (event.getSource() == button){ // <--- "button can not be resolved"
System.out.println("Hello");
}
}
}
Я получаю эту ошибку в Eclipse.Я только что привел (упрощенный) пример, найденный в книге, не знаю, что может быть не так.Требуется глазомер знаний!:)
Решение
Избегайте того, чтобы ваше действие ActionListener зависело от того, какая кнопка была нажата.Если у вас есть разные действия для разных кнопок, то определите отдельный ActionListener для каждого действия.
Таким образом, вашему слушателю не нужно проверять, какая кнопка была нажата.
public void actionPerformed(ActionEvent event){
System.out.println("Hello");
}
Другие советы
В button
объект не виден в классе ButtonHandler
;это локально для Window
конструктор.Вы можете сделать это полем в Window
или выяснить, какая команда была предназначена из ActionEvent
.Смотрите на Учебник для большего.
Добавление:например
if ("OK".equals(event.getActionCommand())) { ...
Невозможно заставить обработчик кнопок знать, на какую кнопку реагирует, но это помешает вам использовать один и тот же объект.
создайте новый конструктор, который принимает объект button как ключ
//...
ButtonHandler handler = new ButtonHandler(button);
//...
и тогда
private class ButtonHandler implements ActionListener {
private JButton button;
ButtonHandler( JButton button) { this.button = button; }
public void actionPerformed(ActionEvent event){
if (event.getSource() == button){ // <--- "button can not be resolved"
System.out.println("Hello");
}
}