接口 Action

在多个控件可以访问相同功能的情况下,Action 接口为 ActionListener 接口提供了有用的扩展。
除了 ActionListener 接口定义的 actionPerformed 方法外,该接口还允许应用程序在一个地方定义:
描述函数的一个或多个文本字符串。例如,这些字符串可用于显示按钮的悬停文本或设置菜单项中的文本。
描述功能的一个或多个图标。这些图标可用于菜单控件中的图像,或用于更复杂的用户界面中的复合条目。
功能的启用/禁用状态。应用程序不必单独禁用菜单项和工具栏按钮,而是可以禁用实现此接口的功能。注册为状态更改监听的所有组件然后知道禁用该项目的事件生成并相应地修改显示。
此接口可以添加到现有类或用于创建适配器(通常,通过子类化 AbstractAction )。然后可以将 Action 对象添加到多个 Action 感知容器并连接到 Action 支持的组件。然后可以通过调用 Action 对象的 setEnabled 方法一次性激活或停用 GUI 控件。
请注意,Action 实现在存储方面往往比典型的 ActionListener 更昂贵,后者不提供集中控制功能和广播属性更改的好处。出于这个原因,您应该注意只在需要它们的好处的地方使用 Action ,而在其他地方使用简单的 ActionListener 。
摆动组件支撑 Action
许多 Swing 组件都有一个 Action 属性。在组件上设置 Action 时,会发生以下情况:
Action 作为 ActionListener 添加到组件中。
该组件配置其某些属性以匹配 Action 。
该组件在 Action 上安装了一个 PropertyChangeListener,以便该组件可以更改其属性以反映 Action 的属性更改。
下表描述了支持 Actions 的 Swing 组件使用的属性。在表中,button 指的是任何 AbstractButton 子类,其中不仅包括 JButton,还包括 JMenuItem 等类。除非另有说明,否则 Action(或 Action 即 null)中的 null 属性值会导致按钮的相应属性设置为 null。
支持的操作属性
组件属性
组件
操作键
笔记
enabled
全部
isEnabled 方法
toolTipText
全部
SHORT_DESCRIPTION
actionCommand
全部
ACTION_COMMAND_KEY
mnemonic
所有按钮
MNEMONIC_KEY
null 值或 Action 导致按钮的 mnemonic 属性被设置为 '\0' 。
text
所有按钮
NAME
如果您不希望按钮的文本与 Action 的文本相同,请将属性 hideActionText 设置为 true。如果 hideActionText 是 true ,设置 Action 会将按钮的文本更改为 null 并且忽略对 NAME 的任何更改。 hideActionText 对于通常只显示 Icon 的工具栏按钮很有用。如果 Action 的 LARGE_ICON_KEY 或 SMALL_ICON 具有非 null 值,则 JToolBar.add(Action) 将属性设置为 true。
displayedMnemonicIndex
所有按钮
DISPLAYED_MNEMONIC_INDEX_KEY
如果 DISPLAYED_MNEMONIC_INDEX_KEY 的值超出文本范围,则忽略它。调用setAction时,如果Action的值为null,则不更新显示的助记符索引。在对 DISPLAYED_MNEMONIC_INDEX_KEY 的任何后续更改中,null 都被视为 -1。
icon
除 JCheckBox、JToggleButton 和 JRadioButton 之外的所有按钮。
LARGE_ICON_KEY 或 SMALL_ICON
JMenuItem 子类仅使用 SMALL_ICON 。所有其他按钮将使用 LARGE_ICON_KEY ;如果值为 null 他们使用 SMALL_ICON 。
accelerator
所有 JMenuItem 子类,JMenu 除外。
ACCELERATOR_KEY
selected
JToggleButton、JCheckBox、JRadioButton、JCheckBoxMenuItem 和 JRadioButtonMenuItem
SELECTED_KEY
尊重此属性的组件仅在它是 non-null 时才使用该值。例如,如果您在 JToggleButton 上为 SELECTED_KEY 设置了一个具有 null 值的 Action,则 JToggleButton 将不会以任何方式更新它的选定状态。类似地,只要 JToggleButton 的选定状态发生变化,它只会在 Action 具有 SELECTED_KEY 的 non-null 值的情况下将值设置回 Action。
遵循此属性的组件会使其选定状态与此属性保持同步。当同一个 Action 与多个组件一起使用时,所有组件都会将其选定状态与此属性保持同步。互斥按钮,例如 ButtonGroup 中的 JToggleButton s,强制仅选择其中一个按钮。因此,不要使用为多个互斥按钮定义 SELECTED_KEY 属性值的相同 Action。
JPopupMenu、JToolBar 和 JMenu 都提供了创建组件和在相应组件上设置 Action 的便捷方法。有关更多信息,请参阅这些类中的每一个。
Action 使用 PropertyChangeListener 通知听众 Action 已更改。 beans 规范表明 null 属性名称可用于指示多个值已更改。默认情况下,采用 Action 的 Swing 组件不处理此类更改。要指示 Swing 应根据 beans 规范处理 null,请将系统属性 swing.actions.reconfigureOnNull 设置为 String 值 true。