Java Swing应用程序框架@Action注解?为何

Java Swing应用程序框架@Action注解?为何,java,swing,Java,Swing,实际上,我正在桌面应用程序上使用Swing应用程序框架,并充分利用会话状态持久性和资源管理器(非常适合全球化) 现在我一直在测试@Action注释功能,实际上我看不出比不使用它有什么好处。 官方文件主要列出了这些优势: 你可以方便地把所有的 相关视觉线索和 组件的事件处理逻辑 在一个地方 是的,这个存储视觉提示的地方就是资源包。(可与资源管理器一起使用) 是的,一个地方的事件处理逻辑在一个通用方法中。但是,为了使方法对多个事件通用,不需要对其进行注释 另一个使用方便的好处 动作界面是你可以 跨多

实际上,我正在桌面应用程序上使用Swing应用程序框架,并充分利用会话状态持久性和资源管理器(非常适合全球化)

现在我一直在测试@Action注释功能,实际上我看不出比不使用它有什么好处。 官方文件主要列出了这些优势:

你可以方便地把所有的 相关视觉线索和 组件的事件处理逻辑 在一个地方

是的,这个存储视觉提示的地方就是资源包。(可与资源管理器一起使用) 是的,一个地方的事件处理逻辑在一个通用方法中。但是,为了使方法对多个事件通用,不需要对其进行注释

另一个使用方便的好处 动作界面是你可以 跨多个应用程序重用相同的操作 用户界面组件。GUI通常提供 完成一项任务的多种方法

是的,显然事件处理对于不同的事件是通用的,但是从不同的Action listeners方法调用通用方法时,也不需要使用@Action注释

我不认为写这篇文章有什么好处:

 openButton.setAction(actionMap.get("open"));
 // NOI18N

 @Action public void open() {
     // processing logic 
 }
而不是:

 openButton.addActionListener(new
 java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 openButtonActionPerformed(evt);
             } });

 private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {
     // processing logic 
 }
提到使用后者,我将我的方法保持私有,这更整洁,并且我还控制添加到侦听器中的特定组件(因为每个组件都有自己的资源,而不是共享相同的视觉提示!)


有人对使用@Action注释感兴趣吗?

当我使用NetBeans时,每个标有@Action的方法都会在NetBeans GUI中自动可用,用于在组件上设置操作。

文档为您的问题提供了答案

我认为使用@Action而不是匿名ActionListener的优势在于@Action是框架中一个非常好和方便的钩子,它可以很容易地将动作的内容(如图标、文本或助记符)本地化。此外,如果@Action注释的方法返回任务对象,则框架将适当地处理不应在EDT上运行的执行代码

如果不使用frameworks@Action,您必须非常小心地本地化您的ActionListener,并更加小心地管理不应在EDT上运行的代码(如果您想要响应的UI)


在返回任务的方法上使用@Action是这个框架提供的一个非常强大的便利。

我明白了。但是,为什么要使用注释在netbeans编辑器中为组件设置操作,而不是(仍然使用netbeans编辑器)向组件添加事件侦听器?这样做的好处是什么?它们不是可以自动为您完成一些事情,并为您节省一些锅炉板代码吗?我已经有一段时间没有使用它了,所以我真的记不起framework+netbeans为您做了什么。我看不出有哪些代码是使用netbeans编辑器无法自动生成的注释自动生成的。实际上,我认为使用动作注释没有任何好处。