我目前正在学习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接收的。
请解释为什么这两种技术在产生的结果上有所不同。
(示例来自教程)。
答案 0 :(得分:0)
在选项1中,Action
的相同实例可能会传递到多个GUI元素中。在选项2中,您为每个GUI元素创建单独的Action
实例。不同之处在于,如果修改选项1中的单个实例,则将更新使用该操作的所有GUI元素,而在选项2中,只有一个元素会更改。