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