Вопрос

У меня есть этот код:

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");   

    }                  
}  
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top