为什么这两种将GUI元素与Action相关联的方式在结果上有所不同?

时间:2014-05-02 20:18:28

标签: java swing action

我目前正在学习this教程。

本教程描述了将文本编辑命令(Action实例)与GUI元素相关联的两种不同方法。


选项1:

通过调用JTextComponent获取包含特定component.getActions()的所有可用操作的数组。之后,按名称将它们排序到HashMap中,并编写一个带有名称并从HashMap返回Action的方法。

然后将GUI元素与JTextComponent上的Action相关联,如下例所示:

JMenu menu = new JMenu("Edit");
...
menu.add(getActionByName(DefaultEditorKit.cutAction));

选项2:

直接实例化Action,然后将GUI元素与其关联。例如:

JMenu menu = new JMenu("Style");

Action action = new StyledEditorKit.BoldAction();
action.putValue(Action.NAME, "Bold");
menu.add(action);
...

本教程指出选项1中使用的Action将由应用程序中的所有JTextComponents共享,而选项2中使用的Action将仅由单个JTextComponent使用。

但是,我不确定这是怎么回事。在选项2中没有任何一个是绑定到特定JTextComponent的Action,而在选项1中,Action是从特定的JTextComponent接收的。

请解释为什么这两种技术在产生的结果上有所不同。

(示例来自教程)。

1 个答案:

答案 0 :(得分:0)

在选项1中,Action的相同实例可能会传递到多个GUI元素中。在选项2中,您为每个GUI元素创建单独的Action实例。不同之处在于,如果修改选项1中的单个实例,则将更新使用该操作的所有GUI元素,而在选项2中,只有一个元素会更改。