Объект не может быть решен - PullRequest
1 голос
/ 09 марта 2010

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

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. Я только что сделал (упрощенный) пример из книги, не знаю, что может быть не так. Знание глаз обязательно! :)

Ответы [ 3 ]

3 голосов
/ 09 марта 2010

Объект button не виден в классе ButtonHandler; это локально для конструктора Window. Вы можете сделать это поле в Window или узнать, какая команда была предназначена из ActionEvent. Подробнее см. Учебник 1009 *.

Приложение: например

if ("OK".equals(event.getActionCommand())) { ...
2 голосов
/ 09 марта 2010

Избегайте того, чтобы действие ActionListener зависело от того, какая кнопка была нажата. Если у вас разные действия для разных кнопок, определите отдельный ActionListener для каждого действия.

Таким образом, слушателю не нужно проверять, какая кнопка была нажата.

public void actionPerformed(ActionEvent event){

    System.out.println("Hello");
}
1 голос
/ 09 марта 2010

У обработчика кнопки нет сведений о том, на какую кнопку она реагирует, но это не позволит вам использовать тот же объект.

сделать новый конструктор, который принимает объект кнопки, является ключом

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

    }                  
}  
...