Ваш вопрос не совсем о слушателях, а о том, как работают интерфейсы и как вы можете создать экземпляр класса в Java.Вот некоторые тонкости:
- По сути, класс JButton предлагает вам способ объявить класс, для которого будет вызываться один конкретный метод, когда событие вызывается на кнопке, например, при нажатии на нее,Если вы посмотрите на Javadocs для JButton и ActionListener, вы теперь узнаете, как они работают:
http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/AbstractButton.html#addActionListener(java.awt.event.ActionListener)
http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/ActionListener.html
Что вы можете сделать здесьсамым старомодным способом является создание класса, который будет срабатывать, когда кто-то нажимает на вашу кнопку:
public class MyButtonActionListener implements ActionListener {
actionPerformed(ActionEvent e) {
System.out.println("Aww, you clicked!");
}
}
Теперь, как только это будет сделано, вы можете сделать это и добавить его в качестве слушателя.на вашу кнопку:
JButton button = new JButton("My button");
MyButtonActionListener myActionListener = new MyButtonActionListener ();button.addActionListener (myActionListener);
С другой стороны, в Java вы можете создать экземпляр класса anonimousy, что означает, что вместо того, чтобы иметь обработчик для его экземпляра (как myActionListener в приведенном выше коде), вы просто создаете экземплярна лету в нужном вам месте, и у вас не будет обработчика, чтобы использовать его позже.Вот что происходит в вашем коде: реализация ActionListener на лету отключается в качестве параметра для метода addActionListener, который в объявлении fly также включает в себя утверждение, что ваш анонимный экземпляр - это не просто какой-либо класс, а тот, который реализует ActionListener, и тому подобное.Ваше анонимное объявление должно дать реализацию метода actionPerformed.
Третий вариант - иметь класс, реализующий ActionListener (и метод actionPerformed), и внутри этого класса, если вы создаете JButton и хотитечтобы передать его в качестве слушателя экземпляр класса ecompasing, вы будете использовать this для обозначения этого, например:
public class MyButtonActionListener implements ActionListener {
private JButton button = new JButton();
public void init() {
button.addActionListener(this);
}
public actionPerformed(ActionEvent e) {
System.out.println("u clicked!");
}
}
В этом обсуждении есть много более тонких моментов (как в том, как выОбратитесь к «this» на анонимном классе, разделенном внутри другого класса, и как вы ссылаетесь на «this» экземпляра охватывающего класса).Я рекомендую вам прочитать книгу о сертификации Sun Certified Java Programmer, в ней есть глава, посвященная этому