java - Swing 应用程序框架 @Action 注释?做什么的?

标签 java swing

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

现在我一直在测试 @Action 注释功能,实际上我没有看到比不使用它有任何优势。 官方文档主要列出了这些优点:

you can conveniently put all the relevant visual cues and the event-processing logic for a component in one place.

是的,这个存储视觉提示的地方就是资源包。 (可与资源管理器一起使用) 是的,一个地方的事件处理逻辑位于一个通用方法内。但无需注释方法即可使其对多个事件通用。

Another convenient benefit of using Action interfaces is that you can reuse the same action across multiple UI components. GUIs often provide multiple ways to accomplish a task

是的,显然事件处理对于不同的事件来说是通用的,但是再次使用 @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 
 }

要提到的是,使用后者,我将我的方法保持为私有(private),这更简洁,并且我还可以控制添加监听器的特定组件(因为每个组件都有自己的资源,而不是共享相同的视觉提示!)

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

最佳答案

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

https://docs.oracle.com/javaee/6/api/javax/xml/ws/Action.html

我认为使用 @Action 而不是匿名 ActionListener 的优点是 @Action 是一个非常好的且方便的框架 Hook ,这使得本地化操作的内容(例如图标、文本或助记符)变得非常容易。此外,如果您的 @Action 注释方法返回一个 Task 对象,框架会适当处理不应在 EDT 上运行的执行代码。

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

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

关于java - Swing 应用程序框架 @Action 注释?做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2058727/

相关文章:

java - Xerces2 XML 解析器和 Xalan XSLT 处理器——状态和替换?

java - Spring MVC Hello World 应用程序不工作

java - 是否可以使用同一个 Spring Data Repository 来访问两个不同的数据库(数据源)?

java - 我想在 Java 中的图像上创建一个不可见的可点击对象

java - 选择 JTabbedPane 选项卡时更改 JFrame 显示

Java Swing JTextfield 每 2 秒重置一次

java - Gridlayout 内的 JPanel 导致透明度问题

java - 将 Jquery 事件附加到 JSF 数据表

java - 从 Maven 插件更改 settings.xml

java - 在Java Applet中使用计时器作为秒表进行计数