public interface Action
Action
接口提供 ActionListener
接口的一个有用扩展,以便若干控件访问相同的功能。
除了 ActionListener
接口定义的 actionPerformed
方法之外,此接口还允许应用程序在一个位置定义:
可以将此接口添加到现有类中,或者用它创建一个适配器(通常通过子类化 AbstractAction
来实现)。然后可以将 Action
对象添加到多个可感知 Action
的容器中,并连接到可容纳 Action
的组件。然后可以通过调用 Action
对象的 setEnabled
方法立刻激活或取消激活 GUI 控件。
注意,Action
实现在存储方面的开销比典型的 ActionListener
要高,但后者不具有集中控制功能和广播属性更改的优点。因此,应该注意只在需要这些优点的地方使用 Action
,在别处使用 ActionListener
即可。
Action
的 Swing 组件 许多 Swing 的组件都具有 Action
属性。在组件上设置 Action
时,会发生以下几种情况:
Action
被作为 ActionListener
添加到组件。 Action
。 Action
上安装 PropertyChangeListener
,这样组件可更改其属性以反映 Action
属性中的更改。 下表描述了支持 Action
的 Swing
组件所使用的属性。在该表中,按钮 指的是任何 AbstractButton
子类,它不仅包括 JButton
,而且包括一些类(如 JMenuItem
)。除非另行声明,否则 Action
中的 null
属性值(或者为 null
的 Action
)将导致按钮的对应属性被设置为 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 的工具栏按钮很有用。如果对于 LARGE_ICON_KEY 或 SMALL_ICON ,Action 具有非 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 |
除 JMenu 之外的所有 JMenuItem 子类。 |
ACCELERATOR_KEY |
|
selected |
JToggleButton 、JCheckBox 、JRadioButton 、JCheckBoxMenuItem 和 JRadioButtonMenuItem |
SELECTED_KEY |
如果遵守此属性的组件为非 null ,那么它只使用该值。例如,如果设置了一个 Action ,它在 JToggleButton 上的 SELECTED_KEY 为 null 值,那么该 JToggleButton 将不会以任何方式更新其选定状态。类似地,如果对于 SELECTED_KEY ,Action 具有非 null 值,那么每次 JToggleButton 的选定状态发生更改时,它都会将值设置回 Action 。 遵守此属性的组件保持其选定状态与此属性同步。当将同一个 Action 用于多个组件时,所有组件都保持其选定状态与此属性同步。互斥的按钮(如 ButtonGroup 中的 JToggleButton )将强制选择其中的一个按钮。因此,在用于多个互斥按钮时,不要使用相同的 Action 定义 SELECTED_KEY 属性的值。 |
JPopupMenu
、JToolBar
和 JMenu
都提供便捷方法来创建组件和在相应的组件上设置 Action
。有关更多信息,请参阅这些类。
Action
使用 PropertyChangeListener
来通知侦听器 Action
发生了更改。bean 规范指示 null
属性名称可用于指示多个值发生了更改。默认情况下,带有 Action
的 Swing 组件不处理这样的更改。要指示 Swing 应该根据 bean 规范处理 null
情况,请将系统属性 swing.actions.reconfigureOnNull
设置为 String
值 true
。
AbstractAction
字段摘要 | |
---|---|
static String |
ACCELERATOR_KEY 用来存储将用作动作加速器的 KeyStroke 的键。 |
static String |
ACTION_COMMAND_KEY 用来确定 ActionEvent 的命令 String 的键,ActionEvent 是在 Action 因驻留在与 JComponent 关联的 Keymap 中而被通知时所创建的。 |
static String |
DEFAULT 当前未使用。 |
static String |
DISPLAYED_MNEMONIC_INDEX_KEY 用来存储对应于文本(由 NAME 属性标识)索引的 Integer 值的键,助记符的装饰应在该文本中呈现。 |
static String |
LARGE_ICON_KEY 用来存储 Icon 的键。 |
static String |
LONG_DESCRIPTION 用来存储动作的较长 String 描述的键,用于上下文相关的帮助文件。 |
static String |
MNEMONIC_KEY 用来存储对应于一个 KeyEvent 键代码的 Integer 值的键。 |
static String |
NAME 用来存储动作的 String 名称的键,用于菜单或按钮。 |
static String |
SELECTED_KEY 用来存储对应于选定状态的 Boolean 值的键。 |
static String |
SHORT_DESCRIPTION 用来存储动作的简短 String 描述的键,用于工具提示文本。 |
static String |
SMALL_ICON 用来存储小型 Icon (比如 ImageIcon )的键。 |
方法摘要 | |
---|---|
void |
addPropertyChangeListener(PropertyChangeListener listener) 添加一个 PropertyChange 侦听器。 |
Object |
getValue(String key) 使用关联的键获取此对象的一个属性。 |
boolean |
isEnabled() 返回 Action 的启用状态。 |
void |
putValue(String key, Object value) 使用关联的键设置此对象的一个属性。 |
void |
removePropertyChangeListener(PropertyChangeListener listener) 移除一个 PropertyChange 侦听器。 |
void |
setEnabled(boolean b) 设置 Action 的启用状态。 |
从接口 java.awt.event.ActionListener 继承的方法 |
---|
actionPerformed |
字段详细信息 |
---|
static final String DEFAULT
static final String NAME
String
名称的键,用于菜单或按钮。
static final String SHORT_DESCRIPTION
String
描述的键,用于工具提示文本。
static final String LONG_DESCRIPTION
String
描述的键,用于上下文相关的帮助文件。
static final String SMALL_ICON
Icon
(比如
ImageIcon
)的键。该键通常用于菜单,比如
JMenuItem
。
如果将同一个 Action
用于菜单和按钮,通常应同时指定 SMALL_ICON
和 LARGE_ICON_KEY
。菜单将使用 SMALL_ICON
,按钮将使用 LARGE_ICON_KEY
。
static final String ACTION_COMMAND_KEY
ActionEvent
的命令
String
的键,
ActionEvent
是在
Action
因驻留在与
JComponent
关联的
Keymap
中而被通知时所创建的。
static final String ACCELERATOR_KEY
KeyStroke
的键。
static final String MNEMONIC_KEY
KeyEvent
键代码的
Integer
值的键。该值通常用于指定助记符。例如:
myAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_A)
将
myAction
的助记符设置为 'a'。
static final String SELECTED_KEY
Boolean
值的键。该键通常只用于具有有意义的选择状态的组件。例如:
JRadioButton
和
JCheckBox
使用此键,但是
JMenu
的实例不使用。
该属性不同于其他属性,因为它由组件读取也由组件设置。例如,如果 Action
连接到 JCheckBox
,那么 JCheckBox
的选定状态将根据 Action
的选定状态设置。如果用户在 JCheckBox
上单击,JCheckBox
的选定状态和 Action
都将被更新。
注:此字段的值以 'Swing' 为前缀,以避免与现有 Action
的可能冲突。
static final String DISPLAYED_MNEMONIC_INDEX_KEY
NAME
属性标识)索引的
Integer
值的键,助记符的装饰应在该文本中呈现。如果此属性的值大于等于该文本的长度,则它将被视为 -1。
注:此字段的值以 'Swing' 为前缀,以避免与现有 Action
的可能冲突。
AbstractButton.setDisplayedMnemonicIndex(int)
,
常量字段值
static final String LARGE_ICON_KEY
Icon
的键。该键通常由按钮(如
JButton
和
JToggleButton
)使用。
如果将同一个 Action
用于菜单和按钮,通常应同时指定 SMALL_ICON
和 LARGE_ICON_KEY
。菜单将使用 SMALL_ICON
,按钮将使用 LARGE_ICON_KEY
。
注:此字段的值以 'Swing' 为前缀,以避免与现有 Action
的可能冲突。
方法详细信息 |
---|
Object getValue(String key)
void putValue(String key, Object value)
PropertyChangeEvent
发送到侦听器。
key
- 一个包含键的
String
value
- 一个
Object
值
void setEnabled(boolean b)
Action
的启用状态。在启用时,任何与此对象关联的组件都被激活,并且都能触发此对象的
actionPerformed
方法。如果值发生了更改,则将一个
PropertyChangeEvent
发送到侦听器。
b
- 为 true 表示启用此
Action
;为 false 表示禁用它
boolean isEnabled()
Action
的启用状态。在启用时,任何与此对象关联的组件都被激活,并且都能触发此对象的
actionPerformed
方法。
Action
,则返回 true
void addPropertyChangeListener(PropertyChangeListener listener)
PropertyChange
侦听器。容器和附属组件使用这些方法注册,以侦听此
Action
对象。当启用状态或其他属性发生更改时,已注册的侦听器会收到更改通知。
listener
- 一个
PropertyChangeListener
对象
void removePropertyChangeListener(PropertyChangeListener listener)
PropertyChange
侦听器。
listener
- 一个
PropertyChangeListener
对象
addPropertyChangeListener(java.beans.PropertyChangeListener)