The other type of actions used by the architecture are the internal swing Actions (refered to as behaviour actions) that are embedded within the {@link javax.swing.ActionMap} of a {@link javax.swing.JComponent}.
These two types of actions are distinct from each other: user actions
have a lot of properties but very little semantics by default
(unless explicity bound). Behavior actions have no properties but have
semantics. These two types of actions are linked by the action id
which is the value of the Action.ACTION_COMMAND_KEY
The {@link org.jdesktop.swingx.action.AbstractActionExt} class extends the Swing concept of the Action by adding support for toggle or two state actions. Toggle type actions may be grouped into a set of mutually exclusive actions. This binary actions are represented in the user interface as JToggleButtons, JCheckBoxMenuItems or JRadioButtonMenuItems.
There are two types of user actions: A {@link org.jdesktop.swingx.action.BoundAction} is an action that will invoke a specific method. It may be bound to an explict component, a callback method on an object instance or one or more listeners. A {@link org.jdesktop.swingx.action.TargetableAction} is an action that doesn't have an explicit binding and the invocation will be sent to an arbitrator (the {@link org.jdesktop.swingx.action.TargetManager}) which dispatches the Action to the "current component" - represented by a Targetable instance. The current component may be explictly set by some programmatic policy (for example, changes in state).
By defalt, the current component will be driven by the focus policy as dictated by the current FocusManager. If the current component cannot handle the action then the action will be dispatched up the containment hierarchy until the action is consumed. If the action is not consumed then it will be dispatched to the Application instance which manages an application global set of actions.
These are the key classes or the actions architecture: