Module java.desktop
Package javax.swing

Interface Action

所有超接口:
ActionListener, EventListener
所有已知实现类:
AbstractAction, BasicDesktopPaneUI.CloseAction, BasicDesktopPaneUI.MaximizeAction, BasicDesktopPaneUI.MinimizeAction, BasicDesktopPaneUI.NavigateAction, BasicDesktopPaneUI.OpenAction, BasicFileChooserUI.ApproveSelectionAction, BasicFileChooserUI.CancelSelectionAction, BasicFileChooserUI.ChangeToParentDirectoryAction, BasicFileChooserUI.GoHomeAction, BasicFileChooserUI.NewFolderAction, BasicFileChooserUI.UpdateAction, BasicInternalFrameTitlePane.CloseAction, BasicInternalFrameTitlePane.IconifyAction, BasicInternalFrameTitlePane.MaximizeAction, BasicInternalFrameTitlePane.MoveAction, BasicInternalFrameTitlePane.RestoreAction, BasicInternalFrameTitlePane.SizeAction, BasicSliderUI.ActionScroller, BasicTreeUI.TreeCancelEditingAction, BasicTreeUI.TreeHomeAction, BasicTreeUI.TreeIncrementAction, BasicTreeUI.TreePageAction, BasicTreeUI.TreeToggleAction, BasicTreeUI.TreeTraverseAction, DefaultEditorKit.BeepAction, DefaultEditorKit.CopyAction, DefaultEditorKit.CutAction, DefaultEditorKit.DefaultKeyTypedAction, DefaultEditorKit.InsertBreakAction, DefaultEditorKit.InsertContentAction, DefaultEditorKit.InsertTabAction, DefaultEditorKit.PasteAction, HTMLEditorKit.HTMLTextAction, HTMLEditorKit.InsertHTMLTextAction, MetalFileChooserUI.DirectoryComboBoxAction, StyledEditorKit.AlignmentAction, StyledEditorKit.BoldAction, StyledEditorKit.FontFamilyAction, StyledEditorKit.FontSizeAction, StyledEditorKit.ForegroundAction, StyledEditorKit.ItalicAction, StyledEditorKit.StyledTextAction, StyledEditorKit.UnderlineAction, TextAction

public interface Action extends ActionListener
Action接口为ActionListener接口提供了一个有用的扩展,用于在多个控件可以访问相同功能的情况下。

除了ActionListener接口定义的actionPerformed方法之外,该接口允许应用程序在一个地方定义:

  • 描述该功能的一个或多个文本字符串。例如,这些字符串可用于显示按钮的悬停文本或设置菜单项中的文本。
  • 描绘该功能的一个或多个图标。这些图标可用于菜单控件中的图像,或用于更复杂用户界面中的组合条目。
  • 功能的启用/禁用状态。应用程序可以禁用实现此接口的功能,而不必单独禁用菜单项和工具栏按钮。所有注册为状态更改侦听器的组件都知道为该项目禁用事件生成,并相应地修改显示。

此接口可以添加到现有类中,或用于创建适配器(通常是通过对AbstractAction进行子类化)。然后,Action对象可以添加到多个支持Action的容器中,并连接到支持Action的组件。然后,通过调用Action对象的setEnabled方法,可以一次性激活或停用GUI控件。

请注意,与典型的ActionListener相比,Action实现在存储方面往往更昂贵,后者不提供功能的集中控制和属性更改的广播。因此,您应该谨慎使用Action,只在需要其优点时使用,并在其他地方使用简单的ActionListener

支持Action的Swing组件

许多Swing组件都具有Action属性。当在组件上设置Action时,会发生以下情况:

  • Action被添加为组件的ActionListener
  • 组件配置一些属性以匹配Action
  • 组件在Action上安装一个PropertyChangeListener,以便组件可以根据Action的属性更改来更改其属性。

以下表格描述了支持ActionsSwing组件使用的属性。在表格中,“按钮”指的是任何AbstractButton子类,不仅包括JButton,还包括JMenuItem等类。除非另有说明,在Action中的null属性值(或nullAction)会导致按钮的相应属性设置为null

支持的Action属性
组件属性 组件 Action键 备注
enabled 所有 isEnabled方法  
toolTipText 所有 SHORT_DESCRIPTION  
actionCommand 所有 ACTION_COMMAND_KEY  
mnemonic 所有按钮 MNEMONIC_KEY null值或Action会导致按钮的mnemonic属性设置为'\0'
text 所有按钮 NAME 如果不希望按钮的文本与Action的文本相同,请将属性hideActionText设置为true。如果hideActionTexttrue,设置Action会将按钮的文本更改为null,并且对NAME的任何更改都将被忽略。对于通常只显示Icon的工具栏按钮,hideActionText很有用。JToolBar.add(Action)如果ActionLARGE_ICON_KEYSMALL_ICON具有非null值,则将属性设置为true
displayedMnemonicIndex 所有按钮 DISPLAYED_MNEMONIC_INDEX_KEY 如果DISPLAYED_MNEMONIC_INDEX_KEY的值超出文本范围,则会被忽略。当调用setAction时,如果来自Action的值为null,则不会更新显示的助记符索引。在对DISPLAYED_MNEMONIC_INDEX_KEY进行任何后续更改时,null将被视为-1。
icon JCheckBoxJToggleButtonJRadioButton之外的所有按钮 要么LARGE_ICON_KEY,要么SMALL_ICON JMenuItem子类仅使用SMALL_ICON。所有其他按钮将使用LARGE_ICON_KEY;如果值为null,则使用SMALL_ICON
accelerator 所有JMenuItem子类,除了JMenu ACCELERATOR_KEY  
selected JToggleButtonJCheckBoxJRadioButtonJCheckBoxMenuItemJRadioButtonMenuItem SELECTED_KEY 只有在值为non-null时,支持此属性的组件才会使用该值。例如,如果在JToggleButton上设置具有null值的SELECTED_KEYAction,则JToggleButton不会以任何方式更新其选定状态。类似地,每当JToggleButton的选定状态更改时,只有在ActionSELECTED_KEY具有non-null值时,它才会将值重新设置到Action上。
支持此属性的组件会将其选定状态与此属性保持同步。当相同的Action用于多个组件时,所有组件都会将其选定状态与此属性保持同步。互斥按钮,例如ButtonGroup中的JToggleButton,只会强制其中一个按钮被选中。因此,请勿将定义了SELECTED_KEY属性值的相同Action用于多个互斥按钮。

JPopupMenuJToolBarJMenu都提供了用于创建组件并在相应组件上设置Action的便捷方法。有关更多信息,请参考这些类。

Action使用PropertyChangeListener来通知侦听器Action已更改。Beans规范指示可以使用null属性名称来指示多个值已更改。默认情况下,接受Action的Swing组件不处理此类更改。要指示Swing根据beans规范处理null,请将系统属性swing.actions.reconfigureOnNull设置为trueString值。

自版本:
1.2
参见:
  • Field Details

    • DEFAULT

      static final String DEFAULT
      目前未使用。
      参见:
    • NAME

      static final String NAME
      用于存储操作的String名称,用于菜单或按钮的键。
      参见:
    • SHORT_DESCRIPTION

      static final String SHORT_DESCRIPTION
      用于存储操作的短String描述,用于工具提示文本的键。
      参见:
    • LONG_DESCRIPTION

      static final String LONG_DESCRIPTION
      用于存储操作的长String描述,可用于上下文相关帮助的键。
      参见:
    • SMALL_ICON

      static final String SMALL_ICON
      用于存储小型Icon(例如ImageIcon)的键。通常与菜单一起使用,例如JMenuItem

      如果相同的Action用于菜单和按钮,通常会同时指定SMALL_ICONLARGE_ICON_KEY。菜单将使用SMALL_ICON,按钮将使用LARGE_ICON_KEY

      参见:
    • ACTION_COMMAND_KEY

      static final String ACTION_COMMAND_KEY
      用于确定在与JComponent关联的Keymap中驻留的Action将被通知为ActionEvent的命令String的键。
      参见:
    • ACCELERATOR_KEY

      static final String ACCELERATOR_KEY
      用于存储KeyStroke以用作操作的加速键的键。
      自:
      1.3
      参见:
    • MNEMONIC_KEY

      static final String MNEMONIC_KEY
      用于存储与KeyEvent键代码之一对应的Integer的键。该值通常用于指定助记键。例如:myAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_A)myAction的助记键设置为'a',而myAction.putValue(Action.MNEMONIC_KEY, KeyEvent.getExtendedKeyCodeForChar('ф'))myAction的助记键设置为西里尔字母"Ef"。
      自:
      1.3
      参见:
    • SELECTED_KEY

      static final String SELECTED_KEY
      用于存储与选定状态对应的Boolean的键。这通常仅用于具有有意义的选择状态的组件。例如,JRadioButtonJCheckBox使用此功能,但JMenu的实例不使用。

      此属性与其他属性不同,因为它既由组件读取又由组件设置。例如,如果将Action附加到JCheckBox,则JCheckBox的选定状态将从Action的选定状态设置。如果用户单击JCheckBox,则JCheckBox的选定状态Action的选定状态将被更新。

      注意:此字段的值以'Swing'为前缀,以避免与现有Actions可能发生的冲突。

      自:
      1.6
      参见:
    • DISPLAYED_MNEMONIC_INDEX_KEY

      static final String DISPLAYED_MNEMONIC_INDEX_KEY
      用于存储与文本中的索引(由NAME属性标识)对应的助记符装饰应该呈现的位置的Integer的键。如果此属性的值大于或等于文本的长度,则将其视为-1。

      注意:此字段的值以'Swing'为前缀,以避免与现有Actions可能发生的冲突。

      自:
      1.6
      参见:
    • LARGE_ICON_KEY

      static final String LARGE_ICON_KEY
      用于存储Icon的键。通常由按钮使用,例如JButtonJToggleButton

      如果相同的Action用于菜单和按钮,通常会同时指定SMALL_ICONLARGE_ICON_KEY。菜单将使用SMALL_ICON,按钮将使用LARGE_ICON_KEY

      注意:此字段的值以'Swing'为前缀,以避免与现有Actions可能发生的冲突。

      自:
      1.6
      参见:
  • Method Details

    • getValue

      Object getValue(String key)
      使用相关键获取此对象的属性之一。
      参数:
      key - 包含键的String
      返回:
      Object
      参见:
    • putValue

      void putValue(String key, Object value)
      使用相关键设置此对象的属性之一。如果值已更改,则向侦听器发送PropertyChangeEvent
      参数:
      key - 包含键的String
      value - 一个Object
    • setEnabled

      void setEnabled(boolean b)
      设置Action的启用状态。启用时,与此对象关联的任何组件都是活动的,并且能够触发此对象的actionPerformed方法。如果值已更改,则向侦听器发送PropertyChangeEvent
      参数:
      b - true表示启用此Action,false表示禁用它
      参见:
    • isEnabled

      boolean isEnabled()
      返回Action的启用状态。启用时,与此对象关联的任何组件都是活动的,并且能够触发此对象的actionPerformed方法。
      返回:
      如果此Action已启用,则为true
      参见:
    • accept

      default boolean accept(Object sender)
      确定是否应使用指定的发送方对象执行操作。sender可以为null。如果操作已禁用,则该方法必须返回false。
      参数:
      sender - 要检查的对象,可以为null
      返回:
      如果应使用发送方对象执行操作,则为true,如果操作已禁用,则必须为false。
      参见:
    • addPropertyChangeListener

      void addPropertyChangeListener(PropertyChangeListener listener)
      添加一个PropertyChange监听器。容器和附加组件使用这些方法来注册对此Action对象的兴趣。当其启用状态或其他属性更改时,注册的侦听器将被通知更改。
      参数:
      listener - 一个PropertyChangeListener对象
    • removePropertyChangeListener

      void removePropertyChangeListener(PropertyChangeListener listener)
      移除一个PropertyChange监听器。
      参数:
      listener - 一个PropertyChangeListener对象
      参见: