gpt4 book ai didi

java - 关于如何实现 Swing Listener 的一些问题

转载 作者:行者123 更新时间:2023-12-02 06:42:18 25 4
gpt4 key购买 nike

我对将 ActionListener 配置与简单的 Java Swing 示例应用程序相关联有些疑问。

通常,我总是将监听器声明为私有(private)内部类,它实现 ActionListener 接口(interface),但这个示例(在网络上找到)以不同的方式工作:

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 接口(interface)的私有(private)内部类来声明监听器,而是执行类似的操作:

    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接口(interface)),同时他实现它(实现actionPerformed()方法)

但我不确定,因为我不知道这种编程风格。

我的推理正确吗?您能给我更准确的信息吗?

最佳答案

您引用的代码正在创建一个 anonymous class .

它与您一直使用的内部类非常相似,只是没有定义的名称。这意味着它不能在其他地方重新实例化/重用,但因为它的工作只是处理一种类型的事件,这并不是真正的问题。

关于java - 关于如何实现 Swing Listener 的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19025134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com