Java 关于如何实现Swing侦听器的一些问题
我对将ActionListener的这种配置与一个简单的Java Swing示例应用程序相关联有一些疑问 通常,我总是将侦听器声明为一个私有内部类,该类实现ActionListener接口,但是这个示例(在web上找到)的工作方式不同:Java 关于如何实现Swing侦听器的一些问题,java,swing,Java,Swing,我对将ActionListener的这种配置与一个简单的Java Swing示例应用程序相关联有一些疑问 通常,我总是将侦听器声明为一个私有内部类,该类实现ActionListener接口,但是这个示例(在web上找到)的工作方式不同: package com.andrea.second; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent
package com.andrea.second;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
/* SimpleMeni it is a JFrame: a container */
public class SimpleMenu extends JFrame {
public SimpleMenu() {
initUI();
}
public final void initUI() {
JMenuBar menubar = new JMenuBar(); // The menu bar containing the main menu voices
ImageIcon icon = new ImageIcon(getClass().getResource("exit.png"));
// Creo 2 menu a tendina:
JMenu file = new JMenu("File");
JMenu bla = new JMenu("Bla");
// Lega l'attivazione del menu allo shortcut ALT+F sulla tastiera:
file.setMnemonic(KeyEvent.VK_F);
JMenuItem eMenuItem = new JMenuItem("Exit", icon); // Etichetta Exit con icona
eMenuItem.setMnemonic(KeyEvent.VK_E);
// Setta un messaggio testuale tooltip al passaggio del mouse sulla voce di menu:
eMenuItem.setToolTipText("Exit application");
// Setto un listener con relativa azione definita dal metodo actionPerformed() della classe che implementa ActionListener:
eMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
file.add(eMenuItem);
menubar.add(file);
menubar.add(bla);
setJMenuBar(menubar);
setTitle("Simple menu");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
SimpleMenu ex = new SimpleMenu();
ex.setVisible(true);
}
});
}
}
如您所见,此示例不通过实现ActionListener接口的私有内部类声明侦听器,而是执行类似操作:
eMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
其中,eMenuItem是我希望处理单击事件的项目
此代码的确切含义是:
(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
我认为它是在创建一个ActionListener类(实现ActionListener接口)的同时实现它(实现actionPerformed()方法)
但我不确定,因为我不知道这种编程风格
我的推理正确吗?你能给我更准确的信息吗?你引用的代码正在创建一个
它与您使用的内部类非常相似,只是没有定义名称。这意味着它不能在其他地方重新实例化/重用,但因为它的任务只是处理一种类型的事件,而这并不是一个真正的问题。mmm也许我遗漏了一些东西……它不能在其他地方重新实例化/重用,对吗?@AndreaNobili抱歉,我的错别字。现在修好了。