java keymap 实例

来源:互联网 发布:人工智能论文参考文献 编辑:程序博客网 时间:2024/05/10 14:18

搬家后的博客链接: IT客栈 www.itkezhan.org
import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.util.Hashtable;import javax.swing.Action;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.KeyStroke;import javax.swing.text.BadLocationException;import javax.swing.text.DefaultEditorKit;import javax.swing.text.Document;import javax.swing.text.JTextComponent;import javax.swing.text.Keymap;import javax.swing.text.TextAction;public class KeyListener {      public static void main(String[] args) {            JTextArea area = new JTextArea(6, 32);            Keymap parent = area.getKeymap();            Keymap newmap = JTextComponent.addKeymap("KeymapExampleMap", parent);  //将一个新 keymap 添加到 keymap 层次结构。            KeyStroke u = KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK);   //建立一个快捷键            Action actionU = new UpWord();            newmap.addActionForKeyStroke(u, actionU);  //向 keymap 添加绑定。            Action actionList[] = area.getActions();   //文本域中有很多个Action            Hashtable<Object, Action> lookup = new Hashtable<Object, Action>();            for (int j = 0; j < actionList.length; j += 1)              lookup.put(actionList[j].getValue(Action.NAME), actionList[j]);  //将每一个Action与它的名字关联,并存到哈希表中            KeyStroke L = KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK);            Action actionL = (Action) lookup.get(DefaultEditorKit.selectLineAction);            newmap.addActionForKeyStroke(L, actionL);            KeyStroke W = KeyStroke.getKeyStroke(KeyEvent.VK_W,InputEvent.CTRL_MASK);            Action actionW = (Action) lookup.get(DefaultEditorKit.selectWordAction);            newmap.addActionForKeyStroke(W, actionW);            area.setKeymap(newmap);            JFrame f = new JFrame("KeymapExample");            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            f.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);            area.setText("This is a test.");            f.pack();            f.setVisible(true);      }}//创建一个行为,该行为是使选定文本都变成大写的class UpWord extends TextAction {      /** *  */private static final long serialVersionUID = -2538112975073229733L;public UpWord() {        super("uppercase-word-action");      }      public void actionPerformed(ActionEvent e) {            JTextComponent comp = getTextComponent(e);  //得到源组件            if (comp == null)              return;            Document doc = comp.getDocument();            int start = comp.getSelectionStart();  //选定文本的起始位置            int end = comp.getSelectionEnd();            try {                  int left = javax.swing.text.Utilities.getWordStart(comp, start); //光标在start位置的单词的起始位置                  int right = javax.swing.text.Utilities.getWordEnd(comp, end);    //这样将选定的文本扩充了它的开始和结尾                  String word = doc.getText(left, right - left);  //得到选定的文本                  doc.remove(left, right - left);                  doc.insertString(left, word.toUpperCase(), null);                  comp.setSelectionStart(start);                  comp.setSelectionEnd(end);            } catch (BadLocationException ble) {                  return;            }      }}


原创粉丝点击