java - 使用注册表管理 Swing Action

标签 java swing user-interface action

通常,当我创建 Swing(或任何 UI)应用程序时,我会在菜单项和按钮上显示各种操作。我通常会创建一个操作注册表并将操作存储在其中,然后当某些事情发生时,我会根据应用程序的状态在注册表中禁用/启用操作。 我不会称自己为狂热的 Swing 开发人员,尽管我非常了解如何使用它,但这是管理 Actions 的非常典型的模式吗?或者有更标准的方法吗?

谢谢,

杰夫

最佳答案

Jeff,您的方法看起来不错。我做同样的事情。我调用注册表 ActionHandler,它看起来像这样:

import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.ImmutableClassToInstanceMap;

import javax.swing.*;
import javax.swing.text.DefaultEditorKit;

public class ActionHandler {

    private static final ClassToInstanceMap<Action> actionMap =
            new ImmutableClassToInstanceMap.Builder<Action>().
                    put(DefaultEditorKit.CutAction.class, new DefaultEditorKit.CutAction()).
                    put(DefaultEditorKit.CopyAction.class, new DefaultEditorKit.CopyAction()).
                    put(DefaultEditorKit.PasteAction.class, new DefaultEditorKit.PasteAction()).
                    put(RefreshAction.class, new RefreshAction()).
                    put(MinimizeAction.class, new MinimizeAction()).
                    put(ZoomAction.class, new ZoomAction()).
                    build();

    public static Action getActionFor(Class<? extends Action> actionClasss) {
        return actionMap.getInstance(actionClasss);
    }
}

现在要禁用,比如 ZoomAction,我使用

   ActionHandler.getActionFor(ZoomAction.class).setEnabled(false);

关于java - 使用注册表管理 Swing Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1325369/

相关文章:

java - Android 以编程方式创建的 ImageView 未显示

java - 如何获取所有tomcat HTTP响应

java - javadoc中 "since"注解的日期格式是什么?

java - 在Java中将文本调整为物理尺寸(标准8.5"x 11"信纸)

c++ - Qt:在显示之前更新隐藏的小部件?

java - 当 JSON 为 null 时尝试从中提取

java - 每次我希望清除一个新的 DefaultStyledDocument 并重新开始时,构建一个新的 DefaultStyledDocument 是一种不好的形式吗?

java - JXTable 列中的超链接,从数据库中填充

java - 如何使用 gridbag 将 JFrame 的一半设为文本区域,另一半设为按钮?

Python:pyqt 应用程序中的多处理