Package javax.swing.text

Source Code of javax.swing.text.TextAction

/*
* @(#)TextAction.java  1.30 05/11/17
*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package javax.swing.text;

import java.awt.event.ActionEvent;
import java.awt.KeyboardFocusManager;
import java.awt.Component;
import java.util.Hashtable;
import java.util.Enumeration;
import javax.swing.Action;
import javax.swing.AbstractAction;
import javax.swing.KeyStroke;

/**
* An Action implementation useful for key bindings that are
* shared across a number of different text components.  Because
* the action is shared, it must have a way of getting it's
* target to act upon.  This class provides support to try and
* find a text component to operate on.  The preferred way of
* getting the component to act upon is through the ActionEvent
* that is received.  If the Object returned by getSource can
* be narrowed to a text component, it will be used.  If the
* action event is null or can't be narrowed, the last focused
* text component is tried.  This is determined by being
* used in conjunction with a JTextController which
* arranges to share that information with a TextAction.
* <p>
* <strong>Warning:</strong>
* Serialized objects of this class will not be compatible with
* future Swing releases. The current serialization support is
* appropriate for short term storage or RMI between applications running
* the same version of Swing.  As of 1.4, support for long term storage
* of all JavaBeans<sup><font size="-2">TM</font></sup>
* has been added to the <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
* @author  Timothy Prinzing
* @version 1.30 11/17/05
*/
public abstract class TextAction extends AbstractAction {

    /**
     * Creates a new JTextAction object.
     *
     * @param name the name of the action
     */
    public TextAction(String name) {
  super(name);
    }

    /**
     * Determines the component to use for the action.
     * This if fetched from the source of the ActionEvent
     * if it's not null and can be narrowed.  Otherwise,
     * the last focused component is used.
     *
     * @param e the ActionEvent
     * @return the component
     */
    protected final JTextComponent getTextComponent(ActionEvent e) {
  if (e != null) {
      Object o = e.getSource();
      if (o instanceof JTextComponent) {
    return (JTextComponent) o;
      }
  }
  return getFocusedComponent();
    }
 
    /**
     * Takes one list of
     * commands and augments it with another list
     * of commands.  The second list takes precedence
     * over the first list; that is, when both lists
     * contain a command with the same name, the command
     * from the second list is used.
     *
     * @param list1 the first list, may be empty but not
     *              <code>null</code>
     * @param list2 the second list, may be empty but not
     *              <code>null</code>
     * @return the augmented list
     */
    public static final Action[] augmentList(Action[] list1, Action[] list2) {
  Hashtable h = new Hashtable();
  for (int i = 0; i < list1.length; i++) {
      Action a = list1[i];
      String value = (String)a.getValue(Action.NAME);
      h.put((value!=null ? value:""), a);
  }
  for (int i = 0; i < list2.length; i++) {
      Action a = list2[i];
      String value = (String)a.getValue(Action.NAME);
      h.put((value!=null ? value:""), a);
  }
  Action[] actions = new Action[h.size()];
  int index = 0;
        for (Enumeration e = h.elements() ; e.hasMoreElements() ;) {
            actions[index++] = (Action) e.nextElement();
        }
  return actions;
    }

    /**
     * Fetches the text component that currently has focus.
     * This allows actions to be shared across text components
     * which is useful for key-bindings where a large set of
     * actions are defined, but generally used the same way
     * across many different components.
     *
     * @return the component
     */
    protected final JTextComponent getFocusedComponent() {
        return JTextComponent.getFocusedComponent();
    }
}
TOP

Related Classes of javax.swing.text.TextAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.