Как карта действия с нажатия клавиш

Этот совет Java Swing иллюстрирует метод картирования действий для ввода текста. Разработчик может использовать этот код, чтобы обеспечить ярлыки для пользователей. Например, разработчик может создавать Ctrl-U изменить текущее слово в верхний регистр т.д.



javax.swing



import javax.swing.*;

import javax.swing.text.*;

import java.util.Hashtable;

import java.awt.event.*;

import java.awt.BorderLayout;



public class KeymapExample {

  public static void main(String[] args) {



    // start with a simple JTextArea, get its Keymap to use as our parent,

    // and create a new map called "KeymapExampleMap"

    JTextArea area = new JTextArea(632);

    Keymap parent = area.getKeymap();

    Keymap newmap = JTextComponent.addKeymap("KeymapExampleMap", parent);



    // add CTRL-U: change current word to upper case (our own action)

    KeyStroke u = KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK);

    Action actionU = new UpWord()// an inner class (defined below)

    newmap.addActionForKeyStroke(u, actionU);



    // get all the actions JTextArea provides for us

    Action actionList[] = area.getActions();

    // put them in a Hashtable so we can retreive them by Action.NAME

    Hashtable lookup = new Hashtable();

    for (int j=0; j < actionList.length; j+=1)

      lookup.put(actionList[j].getValue(Action.NAME), actionList[j]);



    // add CTRL-L: select current line (action provided for us)

    KeyStroke L = KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK);

    Action actionL = (Action)lookup.get(DefaultEditorKit.selectLineAction);

    newmap.addActionForKeyStroke(L, actionL);



    // add CTRL-W: select current word (action provided for us)

    KeyStroke W = KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK);

    Action actionW = (Action)lookup.get(DefaultEditorKit.selectWordAction);

    newmap.addActionForKeyStroke(W, actionW);



    // set the JTextArea's Keymap to be our new map

    area.setKeymap(newmap);



    // show the TextPane

    JFrame f = new JFrame("KeymapExample");

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    f.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);

    area.setText("This is the story\nof the hare who\nlost his spectacles.");

    f.pack();

    f.setVisible(true);

  }



  // begin inner class

  public static class UpWord extends TextAction {

    public UpWord() {

      super("uppercase-word-action");

    }



    public void actionPerformed(ActionEvent e) {

      // change current word (or selected words) to upper case

      JTextComponent comp = getTextComponent(e);

      if (comp == nullreturn;

      Document doc = comp.getDocument();

      int start = comp.getSelectionStart();

      int end = comp.getSelectionEnd();

      try {

        int left = javax.swing.text.Utilities.getWordStart(comp, 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)// restore previous position/selection

        comp.setSelectionEnd(end);

      catch (BadLocationException ble) { return}

    }

  // end inner class

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>