一尘不染

使用注册表管理Swing操作

java

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

谢谢,

杰夫


阅读 214

收藏
2020-12-03

共1个答案

一尘不染

杰夫,您的方法似乎是一种好方法。我做同样的事情。我将注册表称为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);
2020-12-03