相关疑难解决方法(0)

ActionListener最佳实践


抱歉标题,可能太通用了.

我已经阅读了Java 如何编写动作监听器教程,我已经阅读了这个问题,但我仍有一些疑问:当我必须多次执行相同的动作时,我想知道哪种解决方案是最好的.

我想重用相同的ActionListener,但我不确定如何以最好的方式实现这一点(在代码可读性,代码可持续性,性能和代码风格方面).

首先是"标准"代码(如果我不打算重用动作监听器,我将使用它):

btnMenu.addActionListener(
    new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Navigator.showMenu();
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

这样我就无法重用任何obv,因为它是一个匿名的内部类......

现在,我可以想到以下解决方案:

  1. 在字段中存储匿名内部类的引用(很可能是static final);
  2. 编写一个实现ActionListener接口的新类.

解决方案1的示例代码:

public static final MENU_ACTION_LISTENER = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        Navigator.showMenu();
    }
};

btnMenu.addActionListener(MENU_ACTION_LISTENER);
Run Code Online (Sandbox Code Playgroud)

解决方案2的示例代码:

// package-private, only GUI-package classes should be able to use it.
// most likely I won't ever need to subclass it, so why not making it final?
final class …
Run Code Online (Sandbox Code Playgroud)

java swing package actionlistener

8
推荐指数
1
解决办法
3816
查看次数

将JMenuItem的名称赋予它的ActionListener

我怎样才能给出附在他们身上JMenuItem的名字ActionListener

我有一个由单个处理的菜单系统,ActionListener这些菜单中的一些项目重复名称.这不是用户端的问题,因为它显然是做什么的; 事实上,如果他们有不同的名字会更加混乱.但是,在我的最后,我想要唯一地标记每个项目.

创建我的项目的部分如下所示:

String label = getLabel(forThisItem);
JMenuItem item = new JMenuItem(label);
item.setName(parentMenu.getName() + "_" + label);
item.addActionListener(actionListener);
parentmenu.add(item);
Run Code Online (Sandbox Code Playgroud)

使用getName()在事后(在此方法的范围之外)询问项目,给出我给它的名称,因为它应该,但输出

public void actionPerformed(ActionEvent ae) {
    String actionPerformed = ae.getActionCommand();
    System.out.println("actionPerformed: " + actionPerformed);
}
Run Code Online (Sandbox Code Playgroud)

是用户看到的,可能是重复的名称,由label我指定的名称,而不是我给它的唯一名称.

如何将正确的信息提供给ActionListener?

java user-interface swing menu actionlistener

2
推荐指数
1
解决办法
3276
查看次数

标签 统计

actionlistener ×2

java ×2

swing ×2

menu ×1

package ×1

user-interface ×1