<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSwing_Event%2FAction</id>
		<title>Java Tutorial/Swing Event/Action - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSwing_Event%2FAction"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Swing_Event/Action&amp;action=history"/>
		<updated>2026-04-21T20:20:04Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Swing_Event/Action&amp;diff=2913&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Swing_Event/Action&amp;diff=2913&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Swing_Event/Action&amp;diff=2914&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Swing_Event/Action&amp;diff=2914&amp;oldid=prev"/>
				<updated>2010-05-31T15:19:00Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  AbstractAction Lookup Property Keys ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;One complexity-busting side effect when using AbstractAction is that it lets you disable the Action &lt;br /&gt;
with setEnabled(false), which, in turn, will disable all components created from it.&amp;lt;/p&amp;gt;&lt;br /&gt;
ConstantDescriptionNAMEAction name, used as button labelSMALL_ICONIcon for the Action, used as button labelSHORT_DESCRIPTIONShort description of the Action; could be used as tooltip text, but not by defaultLONG_DESCRIPTIONLong description of the Action; could be used for accessibility (see Chapter 22)ACCELERATORKeyStroke string; can be used as the accelerator for the ActionACTION_COMMAND_KEYInputMap key; maps to the Action in the ActionMap of the associated JComponentMNEMONIC_KEYKey code; can be used as mnemonic for actionDEFAULTUnused constant that could be used for your own property&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  ActionMap javax.swing.JComponent.getActionMap() ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    JButton component = new JButton();&lt;br /&gt;
    MyAction action = new MyAction();&lt;br /&gt;
    component.getActionMap().put(action.getValue(Action.NAME), action);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyAction extends AbstractAction {&lt;br /&gt;
  public MyAction() {&lt;br /&gt;
    super(&amp;quot;my action&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    System.out.println(&amp;quot;hi&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Action Usage Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.Icon;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JMenu;&lt;br /&gt;
import javax.swing.JMenuBar;&lt;br /&gt;
import javax.swing.JMenuItem;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JToolBar;&lt;br /&gt;
class PrintHelloAction extends AbstractAction {&lt;br /&gt;
  private static final Icon printIcon = new ImageIcon(&amp;quot;Print.gif&amp;quot;);&lt;br /&gt;
  PrintHelloAction() {&lt;br /&gt;
    super(&amp;quot;Print&amp;quot;, printIcon);&lt;br /&gt;
    putValue(Action.SHORT_DESCRIPTION, &amp;quot;Hello, World&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent actionEvent) {&lt;br /&gt;
    System.out.println(&amp;quot;Hello, World&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class ActionTester {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Action Sample&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    final Action printAction = new PrintHelloAction();&lt;br /&gt;
    JMenuBar menuBar = new JMenuBar();&lt;br /&gt;
    JMenu menu = new JMenu(&amp;quot;File&amp;quot;);&lt;br /&gt;
    menuBar.add(menu);&lt;br /&gt;
    menu.add(new JMenuItem(printAction));&lt;br /&gt;
    JToolBar toolbar = new JToolBar();&lt;br /&gt;
    toolbar.add(new JButton(printAction));&lt;br /&gt;
    JButton enableButton = new JButton(&amp;quot;Enable&amp;quot;);&lt;br /&gt;
    ActionListener enableActionListener = new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent actionEvent) {&lt;br /&gt;
        printAction.setEnabled(true);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    enableButton.addActionListener(enableActionListener);&lt;br /&gt;
    JButton disableButton = new JButton(&amp;quot;Disable&amp;quot;);&lt;br /&gt;
    ActionListener disableActionListener = new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent actionEvent) {&lt;br /&gt;
        printAction.setEnabled(false);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    disableButton.addActionListener(disableActionListener);&lt;br /&gt;
    JButton relabelButton = new JButton(&amp;quot;Relabel&amp;quot;);&lt;br /&gt;
    ActionListener relabelActionListener = new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent actionEvent) {&lt;br /&gt;
        printAction.putValue(Action.NAME, &amp;quot;Changed Action Value&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    relabelButton.addActionListener(relabelActionListener);&lt;br /&gt;
    JPanel buttonPanel = new JPanel();&lt;br /&gt;
    buttonPanel.add(enableButton);&lt;br /&gt;
    buttonPanel.add(disableButton);&lt;br /&gt;
    buttonPanel.add(relabelButton);&lt;br /&gt;
    frame.setJMenuBar(menuBar);&lt;br /&gt;
    frame.add(toolbar, BorderLayout.SOUTH);&lt;br /&gt;
    frame.add(buttonPanel, BorderLayout.NORTH);&lt;br /&gt;
    frame.setSize(300, 200);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating an Action ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.Icon;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.KeyStroke;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    final Action action = new AbstractAction(&amp;quot;Action Name&amp;quot;) {&lt;br /&gt;
      {&lt;br /&gt;
        putValue(Action.SHORT_DESCRIPTION, &amp;quot;Tool Tip Text&amp;quot;);&lt;br /&gt;
        putValue(Action.LONG_DESCRIPTION, &amp;quot;Help Text&amp;quot;);&lt;br /&gt;
        Icon icon = new ImageIcon(&amp;quot;icon.gif&amp;quot;);&lt;br /&gt;
        putValue(Action.SMALL_ICON, icon);&lt;br /&gt;
        putValue(Action.MNEMONIC_KEY, new Integer(java.awt.event.KeyEvent.VK_A));&lt;br /&gt;
        putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(&amp;quot;control F2&amp;quot;));&lt;br /&gt;
      }&lt;br /&gt;
      public void actionPerformed(ActionEvent evt) {&lt;br /&gt;
        System.out.println(&amp;quot;action&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    JButton button = new JButton(action);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Disable an Action ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JMenu;&lt;br /&gt;
import javax.swing.JMenuBar;&lt;br /&gt;
import javax.swing.JMenuItem;&lt;br /&gt;
import javax.swing.JToolBar;&lt;br /&gt;
public class ActionDisabled extends JFrame {&lt;br /&gt;
  public static final String ENABLE = &amp;quot;ENABLE&amp;quot;;&lt;br /&gt;
  public static final String DISABLE = &amp;quot;DISABLE&amp;quot;;&lt;br /&gt;
  private JToolBar toolBar = new JToolBar();&lt;br /&gt;
  private JMenuBar menuBar = new JMenuBar();&lt;br /&gt;
  private JMenu testMenu = new JMenu(&amp;quot;Test&amp;quot;);&lt;br /&gt;
  private MyAction theAction = new MyAction(this);&lt;br /&gt;
  private JMenuItem disableActionItem= new JMenuItem(&amp;quot;Disable the Action&amp;quot;);&lt;br /&gt;
  public ActionDisabled() {&lt;br /&gt;
    this.setJMenuBar(menuBar);&lt;br /&gt;
    menuBar.add(testMenu);&lt;br /&gt;
    testMenu.add(theAction);&lt;br /&gt;
    toolBar.add(theAction);&lt;br /&gt;
    disableActionItem.setActionCommand(DISABLE);&lt;br /&gt;
    testMenu.add(disableActionItem);&lt;br /&gt;
    disableActionItem.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        if (e.getActionCommand().equals(DISABLE)) {&lt;br /&gt;
          theAction.setEnabled(false);&lt;br /&gt;
          disableActionItem.setText(&amp;quot;Enable the Action&amp;quot;);&lt;br /&gt;
          disableActionItem.setActionCommand(ENABLE);&lt;br /&gt;
        } else {&lt;br /&gt;
          theAction.setEnabled(true);&lt;br /&gt;
          disableActionItem.setText(&amp;quot;Disable the Action&amp;quot;);&lt;br /&gt;
          disableActionItem.setActionCommand(DISABLE);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    this.getContentPane().add(toolBar, BorderLayout.NORTH);&lt;br /&gt;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.getContentPane().setBackground(Color.red);&lt;br /&gt;
    this.setSize(320, 200);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ActionDisabled t = new ActionDisabled();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyAction extends AbstractAction {&lt;br /&gt;
  JFrame f;&lt;br /&gt;
  boolean toggle = true;&lt;br /&gt;
  public MyAction(JFrame f) {&lt;br /&gt;
    super(&amp;quot;Change Color&amp;quot;);&lt;br /&gt;
    this.f = f;&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    if (toggle) {&lt;br /&gt;
      f.getContentPane().setBackground(Color.blue);&lt;br /&gt;
      toggle = false;&lt;br /&gt;
    } else {&lt;br /&gt;
      f.getContentPane().setBackground(Color.red);&lt;br /&gt;
      toggle = true;&lt;br /&gt;
    }&lt;br /&gt;
    f.repaint();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Enabling an Action ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.KeyStroke;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    final Action action = new AbstractAction(&amp;quot;Action Name&amp;quot;) {&lt;br /&gt;
      public void actionPerformed(ActionEvent evt) {&lt;br /&gt;
        System.out.println(&amp;quot;action&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
   &lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    JButton button = new JButton(action);&lt;br /&gt;
    JTextField textfield = new JTextField();&lt;br /&gt;
    textfield.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(&amp;quot;F2&amp;quot;),&lt;br /&gt;
        action.getValue(Action.NAME));&lt;br /&gt;
    textfield.getActionMap().put(action.getValue(Action.NAME), action);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  extends AbstractAction ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JMenu;&lt;br /&gt;
import javax.swing.JMenuBar;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextPane;&lt;br /&gt;
import javax.swing.event.UndoableEditEvent;&lt;br /&gt;
import javax.swing.event.UndoableEditListener;&lt;br /&gt;
import javax.swing.undo.UndoManager;&lt;br /&gt;
public class UndoEditor extends JFrame {&lt;br /&gt;
  private UndoManager undoManager = new UndoManager();&lt;br /&gt;
  private JMenuBar menuBar = new JMenuBar();&lt;br /&gt;
  private JMenu editMenu = new JMenu(&amp;quot;Edit&amp;quot;);&lt;br /&gt;
  private UndoAction undoAction = new UndoAction();&lt;br /&gt;
  private RedoAction redoAction = new RedoAction();&lt;br /&gt;
  public UndoEditor() {&lt;br /&gt;
    setLayout(new BorderLayout());&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    JTextPane editor = new JTextPane();&lt;br /&gt;
    editor.getDocument().addUndoableEditListener(new UndoListener());&lt;br /&gt;
    menuBar.add(editMenu);&lt;br /&gt;
    editMenu.add(undoAction);&lt;br /&gt;
    editMenu.add(redoAction);&lt;br /&gt;
    this.setJMenuBar(menuBar);&lt;br /&gt;
    add(new JScrollPane(editor));&lt;br /&gt;
    setSize(400, 300);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    UndoEditor e = new UndoEditor();&lt;br /&gt;
  }&lt;br /&gt;
  class UndoListener implements UndoableEditListener {&lt;br /&gt;
    public void undoableEditHappened(UndoableEditEvent e) {&lt;br /&gt;
      undoManager.addEdit(e.getEdit());&lt;br /&gt;
      undoAction.update();&lt;br /&gt;
      redoAction.update();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class UndoAction extends AbstractAction {&lt;br /&gt;
    public UndoAction() {&lt;br /&gt;
      this.putValue(Action.NAME, undoManager.getUndoPresentationName());&lt;br /&gt;
      this.setEnabled(false);&lt;br /&gt;
    }&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      if (this.isEnabled()) {&lt;br /&gt;
        undoManager.undo();&lt;br /&gt;
        undoAction.update();&lt;br /&gt;
        redoAction.update();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    public void update() {&lt;br /&gt;
      this.putValue(Action.NAME, undoManager.getUndoPresentationName());&lt;br /&gt;
      this.setEnabled(undoManager.canUndo());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class RedoAction extends AbstractAction {&lt;br /&gt;
    public RedoAction() {&lt;br /&gt;
      this.putValue(Action.NAME, undoManager.getRedoPresentationName());&lt;br /&gt;
      this.setEnabled(false);&lt;br /&gt;
    }&lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      if (this.isEnabled()) {&lt;br /&gt;
        undoManager.redo();&lt;br /&gt;
        undoAction.update();&lt;br /&gt;
        redoAction.update();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    public void update() {&lt;br /&gt;
      this.putValue(Action.NAME, undoManager.getRedoPresentationName());&lt;br /&gt;
      this.setEnabled(undoManager.canRedo());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Get and set Action Command ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *&lt;br /&gt;
 *   - Redistributions of source code must retain the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 *   - Redistributions in binary form must reproduce the above copyright&lt;br /&gt;
 *     notice, this list of conditions and the following disclaimer in the&lt;br /&gt;
 *     documentation and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 *   - Neither the name of Sun Microsystems nor the names of its&lt;br /&gt;
 *     contributors may be used to endorse or promote products derived&lt;br /&gt;
 *     from this software without specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS&lt;br /&gt;
 * IS&amp;quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR&lt;br /&gt;
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.KeyEvent;&lt;br /&gt;
import javax.swing.AbstractButton;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
/*&lt;br /&gt;
 * ButtonDemo.java requires the following files: images/right.gif&lt;br /&gt;
 * images/middle.gif images/left.gif&lt;br /&gt;
 */&lt;br /&gt;
public class ButtonDemo extends JPanel implements ActionListener {&lt;br /&gt;
  protected JButton b1, b2, b3;&lt;br /&gt;
  public ButtonDemo() {&lt;br /&gt;
    ImageIcon leftButtonIcon = createImageIcon(&amp;quot;images/right.gif&amp;quot;);&lt;br /&gt;
    ImageIcon middleButtonIcon = createImageIcon(&amp;quot;images/middle.gif&amp;quot;);&lt;br /&gt;
    ImageIcon rightButtonIcon = createImageIcon(&amp;quot;images/left.gif&amp;quot;);&lt;br /&gt;
    b1 = new JButton(&amp;quot;Disable middle button&amp;quot;, leftButtonIcon);&lt;br /&gt;
    b1.setVerticalTextPosition(AbstractButton.CENTER);&lt;br /&gt;
    b1.setHorizontalTextPosition(AbstractButton.LEADING); // aka LEFT, for&lt;br /&gt;
                                                          // left-to-right&lt;br /&gt;
                                                          // locales&lt;br /&gt;
    b1.setMnemonic(KeyEvent.VK_D);&lt;br /&gt;
    b1.setActionCommand(&amp;quot;disable&amp;quot;);&lt;br /&gt;
    b2 = new JButton(&amp;quot;Middle button&amp;quot;, middleButtonIcon);&lt;br /&gt;
    b2.setVerticalTextPosition(AbstractButton.BOTTOM);&lt;br /&gt;
    b2.setHorizontalTextPosition(AbstractButton.CENTER);&lt;br /&gt;
    b2.setMnemonic(KeyEvent.VK_M);&lt;br /&gt;
    b3 = new JButton(&amp;quot;Enable middle button&amp;quot;, rightButtonIcon);&lt;br /&gt;
    // Use the default text position of CENTER, TRAILING (RIGHT).&lt;br /&gt;
    b3.setMnemonic(KeyEvent.VK_E);&lt;br /&gt;
    b3.setActionCommand(&amp;quot;enable&amp;quot;);&lt;br /&gt;
    b3.setEnabled(false);&lt;br /&gt;
    // Listen for actions on buttons 1 and 3.&lt;br /&gt;
    b1.addActionListener(this);&lt;br /&gt;
    b3.addActionListener(this);&lt;br /&gt;
    b1.setToolTipText(&amp;quot;Click this button to disable the middle button.&amp;quot;);&lt;br /&gt;
    b2.setToolTipText(&amp;quot;This middle button does nothing when you click it.&amp;quot;);&lt;br /&gt;
    b3.setToolTipText(&amp;quot;Click this button to enable the middle button.&amp;quot;);&lt;br /&gt;
    // Add Components to this container, using the default FlowLayout.&lt;br /&gt;
    add(b1);&lt;br /&gt;
    add(b2);&lt;br /&gt;
    add(b3);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    if (&amp;quot;disable&amp;quot;.equals(e.getActionCommand())) {&lt;br /&gt;
      b2.setEnabled(false);&lt;br /&gt;
      b1.setEnabled(false);&lt;br /&gt;
      b3.setEnabled(true);&lt;br /&gt;
    } else {&lt;br /&gt;
      b2.setEnabled(true);&lt;br /&gt;
      b1.setEnabled(true);&lt;br /&gt;
      b3.setEnabled(false);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /** Returns an ImageIcon, or null if the path was invalid. */&lt;br /&gt;
  protected static ImageIcon createImageIcon(String path) {&lt;br /&gt;
    java.net.URL imgURL = ButtonDemo.class.getResource(path);&lt;br /&gt;
    if (imgURL != null) {&lt;br /&gt;
      return new ImageIcon(imgURL);&lt;br /&gt;
    } else {&lt;br /&gt;
      System.err.println(&amp;quot;Couldn&amp;quot;t find file: &amp;quot; + path);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Create the GUI and show it. For thread safety, this method should be&lt;br /&gt;
   * invoked from the event-dispatching thread.&lt;br /&gt;
   */&lt;br /&gt;
  private static void createAndShowGUI() {&lt;br /&gt;
    // Create and set up the window.&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;ButtonDemo&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    // Create and set up the content pane.&lt;br /&gt;
    ButtonDemo newContentPane = new ButtonDemo();&lt;br /&gt;
    newContentPane.setOpaque(true); // content panes must be opaque&lt;br /&gt;
    frame.setContentPane(newContentPane);&lt;br /&gt;
    // Display the window.&lt;br /&gt;
    frame.pack();&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    // Schedule a job for the event-dispatching thread:&lt;br /&gt;
    // creating and showing this application&amp;quot;s GUI.&lt;br /&gt;
    javax.swing.SwingUtilities.invokeLater(new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        createAndShowGUI();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Listing the Actions in a Component ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.ActionMap;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    JButton component = new JButton(&amp;quot;button&amp;quot;);&lt;br /&gt;
    ActionMap map = component.getActionMap();&lt;br /&gt;
    list(map, map.keys());&lt;br /&gt;
    list(map, map.allKeys());&lt;br /&gt;
  }&lt;br /&gt;
  static void list(ActionMap map, Object[] actionKeys) {&lt;br /&gt;
    if (actionKeys == null) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; actionKeys.length; i++) {&lt;br /&gt;
      // Get the action bound to this action key&lt;br /&gt;
      while (map.get(actionKeys[i]) == null) {&lt;br /&gt;
        map = map.getParent();&lt;br /&gt;
      }&lt;br /&gt;
      Action action = (Action) map.get(actionKeys[i]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Map actions with keystrokes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.InputEvent;&lt;br /&gt;
import java.awt.event.KeyEvent;&lt;br /&gt;
import java.util.Hashtable;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
import javax.swing.KeyStroke;&lt;br /&gt;
import javax.swing.text.DefaultEditorKit;&lt;br /&gt;
import javax.swing.text.Document;&lt;br /&gt;
import javax.swing.text.JTextComponent;&lt;br /&gt;
import javax.swing.text.Keymap;&lt;br /&gt;
import javax.swing.text.TextAction;&lt;br /&gt;
import javax.swing.text.Utilities;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JTextArea area = new JTextArea(6, 32);&lt;br /&gt;
    Keymap parent = area.getKeymap();&lt;br /&gt;
    Keymap newmap = JTextComponent.addKeymap(&amp;quot;KeymapExampleMap&amp;quot;, parent);&lt;br /&gt;
    KeyStroke u = KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK);&lt;br /&gt;
    Action actionU = new UppercaseAction();&lt;br /&gt;
    newmap.addActionForKeyStroke(u, actionU);&lt;br /&gt;
    Action actionList[] = area.getActions();&lt;br /&gt;
    Hashtable lookup = new Hashtable();&lt;br /&gt;
    for (int j = 0; j &amp;lt; actionList.length; j += 1)&lt;br /&gt;
      lookup.put(actionList[j].getValue(Action.NAME), actionList[j]);&lt;br /&gt;
    KeyStroke L = KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK);&lt;br /&gt;
    Action actionL = (Action) lookup.get(DefaultEditorKit.selectLineAction);&lt;br /&gt;
    newmap.addActionForKeyStroke(L, actionL);&lt;br /&gt;
    area.setKeymap(newmap);&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    f.add(new JScrollPane(area), BorderLayout.CENTER);&lt;br /&gt;
    area.setText(&amp;quot;this is a test&amp;quot;);&lt;br /&gt;
    f.setSize(300,300);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class UppercaseAction extends TextAction {&lt;br /&gt;
  public UppercaseAction() {&lt;br /&gt;
    super(&amp;quot;uppercase-word-action&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    JTextComponent comp = getTextComponent(e);&lt;br /&gt;
    if (comp == null)&lt;br /&gt;
      return;&lt;br /&gt;
    Document doc = comp.getDocument();&lt;br /&gt;
    int start = comp.getSelectionStart();&lt;br /&gt;
    int end = comp.getSelectionEnd();&lt;br /&gt;
    try {&lt;br /&gt;
      int left = Utilities.getWordStart(comp, start);&lt;br /&gt;
      int right = Utilities.getWordEnd(comp, end);&lt;br /&gt;
      String word = doc.getText(left, right - left);&lt;br /&gt;
      doc.remove(left, right - left);&lt;br /&gt;
      doc.insertString(left, word.toUpperCase(), null);&lt;br /&gt;
      comp.setSelectionStart(start); &lt;br /&gt;
      comp.setSelectionEnd(end);&lt;br /&gt;
    } catch (Exception ble) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Register action ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    JButton component = new JButton();&lt;br /&gt;
    MyAction action = new MyAction();&lt;br /&gt;
    component.getActionMap().put(action.getValue(Action.NAME), action);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyAction extends AbstractAction {&lt;br /&gt;
  public MyAction() {&lt;br /&gt;
    super(&amp;quot;my action&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    System.out.println(&amp;quot;hi&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>