<?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%2FSwing_JFC%2FActions</id>
		<title>Java/Swing JFC/Actions - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FSwing_JFC%2FActions"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Swing_JFC/Actions&amp;action=history"/>
		<updated>2026-04-22T22:41:12Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Swing_JFC/Actions&amp;diff=7455&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Swing_JFC/Actions&amp;diff=7455&amp;oldid=prev"/>
				<updated>2010-06-01T06:46:01Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&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;Версия 06:46, 1 июня 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>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Swing_JFC/Actions&amp;diff=7454&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Swing_JFC/Actions&amp;diff=7454&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Action Demo ==&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;
/* From http://java.sun.ru/docs/books/tutorial/index.html */&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2006 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 are met:&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution of source code must retain the above copyright notice, this&lt;br /&gt;
 *  list of conditions and the following disclaimer.&lt;br /&gt;
 *&lt;br /&gt;
 * -Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *  this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
 *  and/or other materials provided with the distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors may&lt;br /&gt;
 * be used to endorse or promote products derived from this software without&lt;br /&gt;
 * specific prior written permission.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility.&lt;br /&gt;
 */&lt;br /&gt;
/* Uses actions with a tool bar and a menu. */&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ItemEvent;&lt;br /&gt;
import java.awt.event.ItemListener;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JCheckBoxMenuItem;&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.JScrollPane;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
import javax.swing.JToolBar;&lt;br /&gt;
public class ActionDemo extends JFrame {&lt;br /&gt;
  protected JTextArea textArea;&lt;br /&gt;
  protected String newline = &amp;quot;\n&amp;quot;;&lt;br /&gt;
  protected Action leftAction;&lt;br /&gt;
  protected Action middleAction;&lt;br /&gt;
  protected Action rightAction;&lt;br /&gt;
  public ActionDemo() {&lt;br /&gt;
    //Do frame stuff.&lt;br /&gt;
    super(&amp;quot;ActionDemo&amp;quot;);&lt;br /&gt;
    addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    //Create the toolbar and menu.&lt;br /&gt;
    JToolBar toolBar = new JToolBar();&lt;br /&gt;
    JMenu mainMenu = new JMenu(&amp;quot;Menu&amp;quot;);&lt;br /&gt;
    createActionComponents(toolBar, mainMenu);&lt;br /&gt;
    //Create the text area used for output.&lt;br /&gt;
    textArea = new JTextArea(5, 30);&lt;br /&gt;
    JScrollPane scrollPane = new JScrollPane(textArea);&lt;br /&gt;
    //Lay out the content pane.&lt;br /&gt;
    JPanel contentPane = new JPanel();&lt;br /&gt;
    contentPane.setLayout(new BorderLayout());&lt;br /&gt;
    contentPane.setPreferredSize(new Dimension(400, 150));&lt;br /&gt;
    contentPane.add(toolBar, BorderLayout.SOUTH);&lt;br /&gt;
    contentPane.add(scrollPane, BorderLayout.CENTER);&lt;br /&gt;
    setContentPane(contentPane);&lt;br /&gt;
    //Set up the menu bar.&lt;br /&gt;
    JMenuBar mb = new JMenuBar();&lt;br /&gt;
    mb.add(mainMenu);&lt;br /&gt;
    mb.add(createAbleMenu());&lt;br /&gt;
    setJMenuBar(mb);&lt;br /&gt;
  }&lt;br /&gt;
  protected void createActionComponents(JToolBar toolBar, JMenu mainMenu) {&lt;br /&gt;
    JButton button = null;&lt;br /&gt;
    JMenuItem menuItem = null;&lt;br /&gt;
    //first button and menu item&lt;br /&gt;
    leftAction = new AbstractAction(&amp;quot;Go left&amp;quot;, new ImageIcon(&lt;br /&gt;
        &amp;quot;images/left.gif&amp;quot;)) {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        displayResult(&amp;quot;Action for first button/menu item&amp;quot;, e);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    button = toolBar.add(leftAction);&lt;br /&gt;
    button.setText(&amp;quot;&amp;quot;); //an icon-only button&lt;br /&gt;
    button.setToolTipText(&amp;quot;This is the left button&amp;quot;);&lt;br /&gt;
    menuItem = mainMenu.add(leftAction);&lt;br /&gt;
    menuItem.setIcon(null); //arbitrarily chose not to use icon in menu&lt;br /&gt;
    //second button and menu item&lt;br /&gt;
    middleAction = new AbstractAction(&amp;quot;Do something&amp;quot;, new ImageIcon(&lt;br /&gt;
        &amp;quot;images/middle.gif&amp;quot;)) {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        displayResult(&amp;quot;Action for second button/menu item&amp;quot;, e);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    button = toolBar.add(middleAction);&lt;br /&gt;
    button.setText(&amp;quot;&amp;quot;);&lt;br /&gt;
    button.setToolTipText(&amp;quot;This is the middle button&amp;quot;);&lt;br /&gt;
    menuItem = mainMenu.add(middleAction);&lt;br /&gt;
    menuItem.setIcon(null); //arbitrarily chose not to use icon in menu&lt;br /&gt;
    //third button and menu item&lt;br /&gt;
    rightAction = new AbstractAction(&amp;quot;Go right&amp;quot;, new ImageIcon(&lt;br /&gt;
        &amp;quot;images/right.gif&amp;quot;)) {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        displayResult(&amp;quot;Action for third button/menu item&amp;quot;, e);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    button = toolBar.add(rightAction);&lt;br /&gt;
    button.setText(&amp;quot;&amp;quot;);&lt;br /&gt;
    button.setToolTipText(&amp;quot;This is the right button&amp;quot;);&lt;br /&gt;
    menuItem = mainMenu.add(rightAction);&lt;br /&gt;
    menuItem.setIcon(null); //arbitrarily chose not to use icon in menu&lt;br /&gt;
  }&lt;br /&gt;
  protected JMenu createAbleMenu() {&lt;br /&gt;
    JMenu ableMenu = new JMenu(&amp;quot;Action State&amp;quot;);&lt;br /&gt;
    JCheckBoxMenuItem cbmi = null;&lt;br /&gt;
    cbmi = new JCheckBoxMenuItem(&amp;quot;First action enabled&amp;quot;);&lt;br /&gt;
    cbmi.setSelected(true);&lt;br /&gt;
    cbmi.addItemListener(new ItemListener() {&lt;br /&gt;
      public void itemStateChanged(ItemEvent e) {&lt;br /&gt;
        JCheckBoxMenuItem mi = (JCheckBoxMenuItem) (e.getSource());&lt;br /&gt;
        boolean selected = (e.getStateChange() == ItemEvent.SELECTED);&lt;br /&gt;
        leftAction.setEnabled(selected);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    ableMenu.add(cbmi);&lt;br /&gt;
    cbmi = new JCheckBoxMenuItem(&amp;quot;Second action enabled&amp;quot;);&lt;br /&gt;
    cbmi.setSelected(true);&lt;br /&gt;
    cbmi.addItemListener(new ItemListener() {&lt;br /&gt;
      public void itemStateChanged(ItemEvent e) {&lt;br /&gt;
        JCheckBoxMenuItem mi = (JCheckBoxMenuItem) (e.getSource());&lt;br /&gt;
        boolean selected = (e.getStateChange() == ItemEvent.SELECTED);&lt;br /&gt;
        middleAction.setEnabled(selected);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    ableMenu.add(cbmi);&lt;br /&gt;
    cbmi = new JCheckBoxMenuItem(&amp;quot;Third action enabled&amp;quot;);&lt;br /&gt;
    cbmi.setSelected(true);&lt;br /&gt;
    cbmi.addItemListener(new ItemListener() {&lt;br /&gt;
      public void itemStateChanged(ItemEvent e) {&lt;br /&gt;
        JCheckBoxMenuItem mi = (JCheckBoxMenuItem) (e.getSource());&lt;br /&gt;
        boolean selected = (e.getStateChange() == ItemEvent.SELECTED);&lt;br /&gt;
        rightAction.setEnabled(selected);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    ableMenu.add(cbmi);&lt;br /&gt;
    return ableMenu;&lt;br /&gt;
  }&lt;br /&gt;
  protected void displayResult(String actionDescription, ActionEvent e) {&lt;br /&gt;
    String s = (&amp;quot;Action event detected by: &amp;quot; + actionDescription + newline&lt;br /&gt;
        + &amp;quot;    Event source: &amp;quot; + e.getSource() + newline);&lt;br /&gt;
    textArea.append(s);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    ActionDemo frame = new ActionDemo();&lt;br /&gt;
    frame.pack();&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&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;
== Action events are fired by subclasses of AbstractButton and includes buttons, checkboxes, and menus. ==&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;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.AbstractButton;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    AbstractButton button = new JButton(&amp;quot;OK&amp;quot;);&lt;br /&gt;
    button.addActionListener(new MyActionListener());&lt;br /&gt;
    JFrame f = new JFrame();&lt;br /&gt;
    f.add(button);&lt;br /&gt;
    f.setSize(300, 300);&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyActionListener implements ActionListener {&lt;br /&gt;
  public void actionPerformed(ActionEvent evt) {&lt;br /&gt;
    AbstractButton button = (AbstractButton) evt.getSource();&lt;br /&gt;
    System.out.println(button.getName());&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;
== Apply special filter to a JTextField ==&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;
import java.awt.FlowLayout;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.text.AttributeSet;&lt;br /&gt;
import javax.swing.text.BadLocationException;&lt;br /&gt;
import javax.swing.text.PlainDocument;&lt;br /&gt;
class JTextFieldFilter extends PlainDocument {&lt;br /&gt;
  public static final String NUMERIC = &amp;quot;0123456789&amp;quot;;&lt;br /&gt;
  protected String acceptedChars = null;&lt;br /&gt;
  protected boolean negativeAccepted = false;&lt;br /&gt;
  public JTextFieldFilter() {&lt;br /&gt;
    this(NUMERIC);&lt;br /&gt;
  }&lt;br /&gt;
  public JTextFieldFilter(String acceptedchars) {&lt;br /&gt;
    acceptedChars = acceptedchars;&lt;br /&gt;
  }&lt;br /&gt;
  public void setNegativeAccepted(boolean negativeaccepted) {&lt;br /&gt;
    if (acceptedChars.equals(NUMERIC)) {&lt;br /&gt;
      negativeAccepted = negativeaccepted;&lt;br /&gt;
      acceptedChars += &amp;quot;-&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {&lt;br /&gt;
    if (str == null)&lt;br /&gt;
      return;&lt;br /&gt;
    for (int i = 0; i &amp;lt; str.length(); i++) {&lt;br /&gt;
      if (acceptedChars.indexOf(str.valueOf(str.charAt(i))) == -1)&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    if (negativeAccepted &amp;amp;&amp;amp; str.indexOf(&amp;quot;-&amp;quot;) != -1) {&lt;br /&gt;
      if (str.indexOf(&amp;quot;-&amp;quot;) != 0 || offset != 0) {&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    super.insertString(offset, str, attr);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main extends JFrame{&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    new Main();&lt;br /&gt;
  }&lt;br /&gt;
  public Main() {&lt;br /&gt;
    JTextField tf1, tf1b, tf1c, tf2, tf3;&lt;br /&gt;
    JLabel l1, l1b, l1c, l2, l3;&lt;br /&gt;
    setLayout(new FlowLayout());&lt;br /&gt;
    //&lt;br /&gt;
    l1 = new JLabel(&amp;quot;only numerics&amp;quot;);&lt;br /&gt;
    tf1 = new JTextField(10);&lt;br /&gt;
    getContentPane().add(l1);&lt;br /&gt;
    getContentPane().add(tf1);&lt;br /&gt;
    tf1.setDocument(new JTextFieldFilter(JTextFieldFilter.NUMERIC));&lt;br /&gt;
    setSize(300,300);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&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;
== A text component has an action map with actions and keymaps with actions ==&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;
&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.text.JTextComponent;&lt;br /&gt;
import javax.swing.text.Keymap;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    JTextComponent component = new JTextField();&lt;br /&gt;
    if (component instanceof JTextComponent) {&lt;br /&gt;
      JTextComponent textComp = (JTextComponent) component;&lt;br /&gt;
      Keymap keymap = textComp.getKeymap();&lt;br /&gt;
      while (keymap != null) {&lt;br /&gt;
        Action[] actions = keymap.getBoundActions();&lt;br /&gt;
        for (int i = 0; i &amp;lt; actions.length; i++) {&lt;br /&gt;
          Action action = actions[i];&lt;br /&gt;
        }&lt;br /&gt;
        Action defaultAction = keymap.getDefaultAction();&lt;br /&gt;
        keymap = keymap.getResolveParent();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&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;
== 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;
  &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;
}&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;
== 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;
  &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;
}&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;
  &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;
}&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 Key Bindings 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;
  &lt;br /&gt;
import java.awt.event.InputEvent;&lt;br /&gt;
import java.awt.event.KeyEvent;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.InputMap;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JComponent;&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;
    JButton component = new JButton(&amp;quot;button&amp;quot;);&lt;br /&gt;
    InputMap map = component.getInputMap(JComponent.WHEN_FOCUSED);&lt;br /&gt;
    list(map, map.keys());&lt;br /&gt;
    list(map, map.allKeys());&lt;br /&gt;
  }&lt;br /&gt;
  static void list(InputMap map, KeyStroke[] keys) {&lt;br /&gt;
    if (keys == null) {&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    for (int i = 0; i &amp;lt; keys.length; i++) {&lt;br /&gt;
      keyStroke2String(keys[i]);&lt;br /&gt;
      while (map.get(keys[i]) == null) {&lt;br /&gt;
        map = map.getParent();&lt;br /&gt;
      }&lt;br /&gt;
      if (map.get(keys[i]) instanceof String) {&lt;br /&gt;
        String actionName = (String) map.get(keys[i]);&lt;br /&gt;
        System.out.println(actionName);&lt;br /&gt;
      } else {&lt;br /&gt;
        Action action = (Action) map.get(keys[i]);&lt;br /&gt;
        System.out.println(action);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  static void keyStroke2String(KeyStroke key) {&lt;br /&gt;
    int m = key.getModifiers();&lt;br /&gt;
    if ((m &amp;amp; (InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK)) != 0) {&lt;br /&gt;
      System.out.println(&amp;quot;shift &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if ((m &amp;amp; (InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK)) != 0) {&lt;br /&gt;
      System.out.println(&amp;quot;ctrl &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if ((m &amp;amp; (InputEvent.META_DOWN_MASK | InputEvent.META_MASK)) != 0) {&lt;br /&gt;
      System.out.println(&amp;quot;meta &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if ((m &amp;amp; (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_MASK)) != 0) {&lt;br /&gt;
      System.out.println(&amp;quot;alt &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if ((m &amp;amp; (InputEvent.BUTTON1_DOWN_MASK | InputEvent.BUTTON1_MASK)) != 0) {&lt;br /&gt;
      System.out.println(&amp;quot;button1 &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if ((m &amp;amp; (InputEvent.BUTTON2_DOWN_MASK | InputEvent.BUTTON2_MASK)) != 0) {&lt;br /&gt;
      System.out.println(&amp;quot;button2 &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if ((m &amp;amp; (InputEvent.BUTTON3_DOWN_MASK | InputEvent.BUTTON3_MASK)) != 0) {&lt;br /&gt;
      System.out.println(&amp;quot;button3 &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    switch (key.getKeyEventType()) {&lt;br /&gt;
    case KeyEvent.KEY_TYPED:&lt;br /&gt;
      System.out.println(&amp;quot;typed &amp;quot;);&lt;br /&gt;
      System.out.println(key.getKeyChar() + &amp;quot; &amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case KeyEvent.KEY_PRESSED:&lt;br /&gt;
      System.out.println(&amp;quot;pressed &amp;quot;);&lt;br /&gt;
      System.out.println(getKeyText(key.getKeyCode()) + &amp;quot; &amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case KeyEvent.KEY_RELEASED:&lt;br /&gt;
      System.out.println(&amp;quot;released &amp;quot;);&lt;br /&gt;
      System.out.println(getKeyText(key.getKeyCode()) + &amp;quot; &amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    default:&lt;br /&gt;
      System.out.println(&amp;quot;unknown-event-type &amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  static String getKeyText(int keyCode) {&lt;br /&gt;
    if (keyCode &amp;gt;= KeyEvent.VK_0 &amp;amp;&amp;amp; keyCode &amp;lt;= KeyEvent.VK_9 || keyCode &amp;gt;= KeyEvent.VK_A&lt;br /&gt;
        &amp;amp;&amp;amp; keyCode &amp;lt;= KeyEvent.VK_Z) {&lt;br /&gt;
      return String.valueOf((char) keyCode);&lt;br /&gt;
    }&lt;br /&gt;
    switch (keyCode) {&lt;br /&gt;
    case KeyEvent.VK_COMMA:&lt;br /&gt;
      return &amp;quot;COMMA&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_PERIOD:&lt;br /&gt;
      return &amp;quot;PERIOD&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_SLASH:&lt;br /&gt;
      return &amp;quot;SLASH&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_SEMICOLON:&lt;br /&gt;
      return &amp;quot;SEMICOLON&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_EQUALS:&lt;br /&gt;
      return &amp;quot;EQUALS&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_OPEN_BRACKET:&lt;br /&gt;
      return &amp;quot;OPEN_BRACKET&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_BACK_SLASH:&lt;br /&gt;
      return &amp;quot;BACK_SLASH&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_CLOSE_BRACKET:&lt;br /&gt;
      return &amp;quot;CLOSE_BRACKET&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ENTER:&lt;br /&gt;
      return &amp;quot;ENTER&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_BACK_SPACE:&lt;br /&gt;
      return &amp;quot;BACK_SPACE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_TAB:&lt;br /&gt;
      return &amp;quot;TAB&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_CANCEL:&lt;br /&gt;
      return &amp;quot;CANCEL&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_CLEAR:&lt;br /&gt;
      return &amp;quot;CLEAR&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_SHIFT:&lt;br /&gt;
      return &amp;quot;SHIFT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_CONTROL:&lt;br /&gt;
      return &amp;quot;CONTROL&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ALT:&lt;br /&gt;
      return &amp;quot;ALT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_PAUSE:&lt;br /&gt;
      return &amp;quot;PAUSE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_CAPS_LOCK:&lt;br /&gt;
      return &amp;quot;CAPS_LOCK&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ESCAPE:&lt;br /&gt;
      return &amp;quot;ESCAPE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_SPACE:&lt;br /&gt;
      return &amp;quot;SPACE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_PAGE_UP:&lt;br /&gt;
      return &amp;quot;PAGE_UP&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_PAGE_DOWN:&lt;br /&gt;
      return &amp;quot;PAGE_DOWN&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_END:&lt;br /&gt;
      return &amp;quot;END&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_HOME:&lt;br /&gt;
      return &amp;quot;HOME&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_LEFT:&lt;br /&gt;
      return &amp;quot;LEFT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_UP:&lt;br /&gt;
      return &amp;quot;UP&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_RIGHT:&lt;br /&gt;
      return &amp;quot;RIGHT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DOWN:&lt;br /&gt;
      return &amp;quot;DOWN&amp;quot;;&lt;br /&gt;
    // numpad numeric keys handled below&lt;br /&gt;
    case KeyEvent.VK_MULTIPLY:&lt;br /&gt;
      return &amp;quot;MULTIPLY&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ADD:&lt;br /&gt;
      return &amp;quot;ADD&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_SEPARATOR:&lt;br /&gt;
      return &amp;quot;SEPARATOR&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_SUBTRACT:&lt;br /&gt;
      return &amp;quot;SUBTRACT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DECIMAL:&lt;br /&gt;
      return &amp;quot;DECIMAL&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DIVIDE:&lt;br /&gt;
      return &amp;quot;DIVIDE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DELETE:&lt;br /&gt;
      return &amp;quot;DELETE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_NUM_LOCK:&lt;br /&gt;
      return &amp;quot;NUM_LOCK&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_SCROLL_LOCK:&lt;br /&gt;
      return &amp;quot;SCROLL_LOCK&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F1:&lt;br /&gt;
      return &amp;quot;F1&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F2:&lt;br /&gt;
      return &amp;quot;F2&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F3:&lt;br /&gt;
      return &amp;quot;F3&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F4:&lt;br /&gt;
      return &amp;quot;F4&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F5:&lt;br /&gt;
      return &amp;quot;F5&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F6:&lt;br /&gt;
      return &amp;quot;F6&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F7:&lt;br /&gt;
      return &amp;quot;F7&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F8:&lt;br /&gt;
      return &amp;quot;F8&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F9:&lt;br /&gt;
      return &amp;quot;F9&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F10:&lt;br /&gt;
      return &amp;quot;F10&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F11:&lt;br /&gt;
      return &amp;quot;F11&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F12:&lt;br /&gt;
      return &amp;quot;F12&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F13:&lt;br /&gt;
      return &amp;quot;F13&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F14:&lt;br /&gt;
      return &amp;quot;F14&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F15:&lt;br /&gt;
      return &amp;quot;F15&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F16:&lt;br /&gt;
      return &amp;quot;F16&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F17:&lt;br /&gt;
      return &amp;quot;F17&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F18:&lt;br /&gt;
      return &amp;quot;F18&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F19:&lt;br /&gt;
      return &amp;quot;F19&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F20:&lt;br /&gt;
      return &amp;quot;F20&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F21:&lt;br /&gt;
      return &amp;quot;F21&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F22:&lt;br /&gt;
      return &amp;quot;F22&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F23:&lt;br /&gt;
      return &amp;quot;F23&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_F24:&lt;br /&gt;
      return &amp;quot;F24&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_PRINTSCREEN:&lt;br /&gt;
      return &amp;quot;PRINTSCREEN&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_INSERT:&lt;br /&gt;
      return &amp;quot;INSERT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_HELP:&lt;br /&gt;
      return &amp;quot;HELP&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_META:&lt;br /&gt;
      return &amp;quot;META&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_BACK_QUOTE:&lt;br /&gt;
      return &amp;quot;BACK_QUOTE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_QUOTE:&lt;br /&gt;
      return &amp;quot;QUOTE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_KP_UP:&lt;br /&gt;
      return &amp;quot;KP_UP&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_KP_DOWN:&lt;br /&gt;
      return &amp;quot;KP_DOWN&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_KP_LEFT:&lt;br /&gt;
      return &amp;quot;KP_LEFT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_KP_RIGHT:&lt;br /&gt;
      return &amp;quot;KP_RIGHT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_GRAVE:&lt;br /&gt;
      return &amp;quot;DEAD_GRAVE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_ACUTE:&lt;br /&gt;
      return &amp;quot;DEAD_ACUTE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_CIRCUMFLEX:&lt;br /&gt;
      return &amp;quot;DEAD_CIRCUMFLEX&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_TILDE:&lt;br /&gt;
      return &amp;quot;DEAD_TILDE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_MACRON:&lt;br /&gt;
      return &amp;quot;DEAD_MACRON&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_BREVE:&lt;br /&gt;
      return &amp;quot;DEAD_BREVE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_ABOVEDOT:&lt;br /&gt;
      return &amp;quot;DEAD_ABOVEDOT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_DIAERESIS:&lt;br /&gt;
      return &amp;quot;DEAD_DIAERESIS&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_ABOVERING:&lt;br /&gt;
      return &amp;quot;DEAD_ABOVERING&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_DOUBLEACUTE:&lt;br /&gt;
      return &amp;quot;DEAD_DOUBLEACUTE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_CARON:&lt;br /&gt;
      return &amp;quot;DEAD_CARON&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_CEDILLA:&lt;br /&gt;
      return &amp;quot;DEAD_CEDILLA&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_OGONEK:&lt;br /&gt;
      return &amp;quot;DEAD_OGONEK&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_IOTA:&lt;br /&gt;
      return &amp;quot;DEAD_IOTA&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_VOICED_SOUND:&lt;br /&gt;
      return &amp;quot;DEAD_VOICED_SOUND&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DEAD_SEMIVOICED_SOUND:&lt;br /&gt;
      return &amp;quot;DEAD_SEMIVOICED_SOUND&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_AMPERSAND:&lt;br /&gt;
      return &amp;quot;AMPERSAND&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ASTERISK:&lt;br /&gt;
      return &amp;quot;ASTERISK&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_QUOTEDBL:&lt;br /&gt;
      return &amp;quot;QUOTEDBL&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_LESS:&lt;br /&gt;
      return &amp;quot;LESS&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_GREATER:&lt;br /&gt;
      return &amp;quot;GREATER&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_BRACELEFT:&lt;br /&gt;
      return &amp;quot;BRACELEFT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_BRACERIGHT:&lt;br /&gt;
      return &amp;quot;BRACERIGHT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_AT:&lt;br /&gt;
      return &amp;quot;AT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_COLON:&lt;br /&gt;
      return &amp;quot;COLON&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_CIRCUMFLEX:&lt;br /&gt;
      return &amp;quot;CIRCUMFLEX&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_DOLLAR:&lt;br /&gt;
      return &amp;quot;DOLLAR&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_EURO_SIGN:&lt;br /&gt;
      return &amp;quot;EURO_SIGN&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_EXCLAMATION_MARK:&lt;br /&gt;
      return &amp;quot;EXCLAMATION_MARK&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_INVERTED_EXCLAMATION_MARK:&lt;br /&gt;
      return &amp;quot;INVERTED_EXCLAMATION_MARK&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_LEFT_PARENTHESIS:&lt;br /&gt;
      return &amp;quot;LEFT_PARENTHESIS&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_NUMBER_SIGN:&lt;br /&gt;
      return &amp;quot;NUMBER_SIGN&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_MINUS:&lt;br /&gt;
      return &amp;quot;MINUS&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_PLUS:&lt;br /&gt;
      return &amp;quot;PLUS&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_RIGHT_PARENTHESIS:&lt;br /&gt;
      return &amp;quot;RIGHT_PARENTHESIS&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_UNDERSCORE:&lt;br /&gt;
      return &amp;quot;UNDERSCORE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_FINAL:&lt;br /&gt;
      return &amp;quot;FINAL&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_CONVERT:&lt;br /&gt;
      return &amp;quot;CONVERT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_NONCONVERT:&lt;br /&gt;
      return &amp;quot;NONCONVERT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ACCEPT:&lt;br /&gt;
      return &amp;quot;ACCEPT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_MODECHANGE:&lt;br /&gt;
      return &amp;quot;MODECHANGE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_KANA:&lt;br /&gt;
      return &amp;quot;KANA&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_KANJI:&lt;br /&gt;
      return &amp;quot;KANJI&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ALPHANUMERIC:&lt;br /&gt;
      return &amp;quot;ALPHANUMERIC&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_KATAKANA:&lt;br /&gt;
      return &amp;quot;KATAKANA&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_HIRAGANA:&lt;br /&gt;
      return &amp;quot;HIRAGANA&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_FULL_WIDTH:&lt;br /&gt;
      return &amp;quot;FULL_WIDTH&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_HALF_WIDTH:&lt;br /&gt;
      return &amp;quot;HALF_WIDTH&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ROMAN_CHARACTERS:&lt;br /&gt;
      return &amp;quot;ROMAN_CHARACTERS&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ALL_CANDIDATES:&lt;br /&gt;
      return &amp;quot;ALL_CANDIDATES&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_PREVIOUS_CANDIDATE:&lt;br /&gt;
      return &amp;quot;PREVIOUS_CANDIDATE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_CODE_INPUT:&lt;br /&gt;
      return &amp;quot;CODE_INPUT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_JAPANESE_KATAKANA:&lt;br /&gt;
      return &amp;quot;JAPANESE_KATAKANA&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_JAPANESE_HIRAGANA:&lt;br /&gt;
      return &amp;quot;JAPANESE_HIRAGANA&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_JAPANESE_ROMAN:&lt;br /&gt;
      return &amp;quot;JAPANESE_ROMAN&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_KANA_LOCK:&lt;br /&gt;
      return &amp;quot;KANA_LOCK&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_INPUT_METHOD_ON_OFF:&lt;br /&gt;
      return &amp;quot;INPUT_METHOD_ON_OFF&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_AGAIN:&lt;br /&gt;
      return &amp;quot;AGAIN&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_UNDO:&lt;br /&gt;
      return &amp;quot;UNDO&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_COPY:&lt;br /&gt;
      return &amp;quot;COPY&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_PASTE:&lt;br /&gt;
      return &amp;quot;PASTE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_CUT:&lt;br /&gt;
      return &amp;quot;CUT&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_FIND:&lt;br /&gt;
      return &amp;quot;FIND&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_PROPS:&lt;br /&gt;
      return &amp;quot;PROPS&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_STOP:&lt;br /&gt;
      return &amp;quot;STOP&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_COMPOSE:&lt;br /&gt;
      return &amp;quot;COMPOSE&amp;quot;;&lt;br /&gt;
    case KeyEvent.VK_ALT_GRAPH:&lt;br /&gt;
      return &amp;quot;ALT_GRAPH&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    if (keyCode &amp;gt;= KeyEvent.VK_NUMPAD0 &amp;amp;&amp;amp; keyCode &amp;lt;= KeyEvent.VK_NUMPAD9) {&lt;br /&gt;
      char c = (char) (keyCode - KeyEvent.VK_NUMPAD0 + &amp;quot;0&amp;quot;);&lt;br /&gt;
      return &amp;quot;NUMPAD&amp;quot; + c;&lt;br /&gt;
    }&lt;br /&gt;
    return &amp;quot;unknown(0x&amp;quot; + Integer.toString(keyCode, 16) + &amp;quot;)&amp;quot;;&lt;br /&gt;
  }&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;
== Sharing an InputMap or an ActionMap Between Two Components ==&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;
import java.awt.event.ActionEvent;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.ActionMap;&lt;br /&gt;
import javax.swing.InputMap;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JTextArea;&lt;br /&gt;
import javax.swing.KeyStroke;&lt;br /&gt;
import javax.swing.text.JTextComponent;&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) {&lt;br /&gt;
    InputMap im = new JTextArea().getInputMap(JComponent.WHEN_FOCUSED);&lt;br /&gt;
    im.put(KeyStroke.getKeyStroke(&amp;quot;F2&amp;quot;), &amp;quot;actionName&amp;quot;);&lt;br /&gt;
    ActionMap am = new JTextArea().getActionMap();&lt;br /&gt;
    am.put(&amp;quot;actionName&amp;quot;, new AbstractAction(&amp;quot;actionName&amp;quot;) {&lt;br /&gt;
      public void actionPerformed(ActionEvent evt) {&lt;br /&gt;
        System.out.println((JTextComponent) evt.getSource());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    im.put(KeyStroke.getKeyStroke(&amp;quot;F3&amp;quot;), &amp;quot;actionName2&amp;quot;);&lt;br /&gt;
    am.put(&amp;quot;actionName2&amp;quot;, new AbstractAction(&amp;quot;actionName2&amp;quot;) {&lt;br /&gt;
      public void actionPerformed(ActionEvent evt) {&lt;br /&gt;
        System.out.println((JTextComponent) evt.getSource());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    JButton component1 = new JButton(&amp;quot;button 1&amp;quot;);&lt;br /&gt;
    JButton component2 = new JButton(&amp;quot;button 2&amp;quot;);&lt;br /&gt;
    component1.setInputMap(JComponent.WHEN_FOCUSED, im);&lt;br /&gt;
    component2.setInputMap(JComponent.WHEN_FOCUSED, im);&lt;br /&gt;
    component1.setActionMap(am);&lt;br /&gt;
    component2.setActionMap(am);&lt;br /&gt;
&lt;br /&gt;
  }&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;/div&gt;</summary>
			</entry>

	</feed>