用Java在一个类中具有多个ActionListener的正确方法是什么?

时间:2019-02-09 13:08:32

标签: java

我仍然是Java的初学者,想检查我编写代码的方式是否正确。我的问题是关于在一个类中控制多个som对象的多个ActionListener。

我有2个菜单和按钮,这3个菜单具有操作侦听器,以收听我作为输入提供的信息。

对于按钮,我使用通过“ implements Actionlistener”自动生成的actionlistener方法

对于这两个菜单,我只使用

menu1.addActionListener(new ActionListener)
{Auto generated code}

这是否足够有效,或者有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

当按钮操作后您要执行的代码因按钮而异时,您的实现方法是正确的。

但是,如果您要执行的动作彼此相似并且可以由一个侦听器以更简洁的方式处理,则可以将相同的ActionListener分配给多个按钮。 一种方法是在声明/初始化按钮的类中实现ActionListener接口,然后通过调用menu1.addActionListener(this);进行注册。

答案 1 :(得分:0)

我建议使用javax.swing.Action抽象。在其actionPerformed()方法中,实现您希望菜单项执行的操作(使用MVC分隔,应该是调用某些控制器方法的瘦包装器。)

然后,只需执行menu.add(action);

Action实现ActionListener,其优点是该动作不仅包含实现,而且还包含其名称,图标,键盘快捷键等。您可以使用它来创建菜单项,对话框按钮,工具栏按钮等。继续,因为所有这些Swing元素都知道如何从Action进行初始化。

private Icon deleteIcon = ...;
private Action deleteAction = new AbstractAction("Delete", deleteIcon) {
    @Override
    public void actionPerformed(ActionEvent event) {
        // do whatever you want, typically ignoring the event.
    }
};

//...

private void initializeGui() {
    // in a main menu:
    JMenuBar menuBar = new JMenuBar();
    JMenu fileMenu = new JMenu("File");
    menuBar.add(fileMenu);
    fileMenu.add(deleteAction);

    // or as a button:
    add(new JButton(deleteAction), ...);
}