Mapeando ações através de keystrokes

Esta dica de Java ilustra um método de mapear ações com keystrokes.

Mapeando ações através de keystrokes


Esta dica de Java ilustra um método de mapear ações com keystrokes. O desenvolvedor pode usar este código para fornecer atalhos aos usuários. Por exemplo o desenvolvedor pode ajustar CTRL-U para deixar toda a palavra selecionada com letras maiúsculas, etc.

 

 

import javax.swing.*;
<B><SPAN lang=EN-US >import </SPAN></B><SPAN lang=EN-US >javax.swing.text.*;</SPAN>
<B><SPAN lang=EN-US >import </SPAN></B><SPAN lang=EN-US >java.util.Hashtable;</SPAN>
<B><SPAN lang=EN-US >import </SPAN></B><SPAN lang=EN-US >java.awt.event.*;</SPAN>
<B><SPAN lang=EN-US >import </SPAN></B><SPAN lang=EN-US >java.awt.BorderLayout;</SPAN>

<B><SPAN lang=EN-US >public class </SPAN></B><SPAN lang=EN-US >KeymapExample {</SPAN>
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public static void </SPAN></B><SPAN lang=EN-US >main(String[] args) {</SPAN>

<SPAN lang=EN-US >JTextArea area = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >JTextArea(</SPAN><SPAN lang=EN-US >6</SPAN><SPAN lang=EN-US >, </SPAN><SPAN lang=EN-US >32</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >Keymap parent = area.getKeymap();</SPAN>
<SPAN lang=EN-US >Keymap newmap = JTextComponent.addKeymap(</SPAN><SPAN lang=EN-US >"KeymapExampleMap"</SPAN><SPAN lang=EN-US >, parent);</SPAN>

<SPAN lang=EN-US >// CTRL-U: muda a palavra para upper case</SPAN>
<SPAN lang=EN-US >KeyStroke u = KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK);</SPAN>
<SPAN lang=EN-US >Action actionU = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >UpWord(); </SPAN>
<SPAN lang=EN-US >newmap.addActionForKeyStroke(u, actionU);</SPAN>


<SPAN lang=EN-US >Action actionList[] = area.getActions();</SPAN>

<SPAN lang=EN-US >Hashtable lookup = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >Hashtable();</SPAN>
<B><SPAN lang=EN-US >for </SPAN></B><SPAN lang=EN-US >(</SPAN><B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >j=</SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >; j < actionList.length; j+=</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >)</SPAN>
<SPAN lang=EN-US >lookup.put(actionList[j].getValue(Action.NAME), actionList[j]);</SPAN>

<SPAN lang=EN-US >// CTRL-L: seleciona toda a linha</SPAN>
<SPAN lang=EN-US >KeyStroke L = KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK);</SPAN>
<SPAN lang=EN-US >Action actionL = (Action)lookup.get(DefaultEditorKit.selectLineAction);</SPAN>
<SPAN lang=EN-US >newmap.addActionForKeyStroke(L, actionL);</SPAN>

<SPAN lang=EN-US >// CTRL-W: seleciona a palavra próxima do cursor</SPAN>
<SPAN lang=EN-US >KeyStroke W = KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK);</SPAN>
<SPAN lang=EN-US >Action actionW = (Action)lookup.get(DefaultEditorKit.selectWordAction);</SPAN>
<SPAN lang=EN-US >newmap.addActionForKeyStroke(W, actionW);</SPAN>

<SPAN lang=EN-US >area.setKeymap(newmap);</SPAN>

<SPAN lang=EN-US >JFrame f = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >JFrame(</SPAN><SPAN lang=EN-US >"KeymapExample"</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</SPAN>
<SPAN lang=EN-US >f.getContentPane().add(</SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >JScrollPane(area), BorderLayout.CENTER);</SPAN>
<SPAN lang=EN-US >area.setText(</SPAN><SPAN lang=EN-US >"This is the story\nof the hare who\nlost his spectacles."</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >f.pack();</SPAN>
<SPAN lang=EN-US >f.setVisible(</SPAN><B><SPAN lang=EN-US >true</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >}</SPAN>
 
<SPAN lang=EN-US >  </SPAN><B><SPAN lang=EN-US >public static class </SPAN></B><SPAN lang=EN-US >UpWord </SPAN><B><SPAN lang=EN-US >extends </SPAN></B><SPAN lang=EN-US >TextAction {</SPAN>
<B><SPAN lang=EN-US >public </SPAN></B><SPAN lang=EN-US >UpWord() {</SPAN>
<B><SPAN lang=EN-US >super</SPAN></B><SPAN lang=EN-US >(</SPAN><SPAN lang=EN-US >"uppercase-word-action"</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >}</SPAN>

<B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >actionPerformed(ActionEvent e) {</SPAN>
<SPAN lang=EN-US >JTextComponent comp = getTextComponent(e);</SPAN>
<B><SPAN lang=EN-US >if </SPAN></B><SPAN lang=EN-US >(comp == </SPAN><B><SPAN lang=EN-US >null</SPAN></B><SPAN lang=EN-US >) </SPAN><B><SPAN lang=EN-US >return</SPAN></B><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >Document doc = comp.getDocument();</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >start = comp.getSelectionStart();</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >end = comp.getSelectionEnd();</SPAN>
<B><SPAN lang=EN-US >try </SPAN></B><SPAN lang=EN-US >{</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >left = javax.swing.text.Utilities.getWordStart(comp, start);</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >right = javax.swing.text.Utilities.getWordEnd(comp, end);</SPAN>
<SPAN lang=EN-US >String word = doc.getText(left, right-left);</SPAN>
<SPAN lang=EN-US >doc.remove(left, right-left);</SPAN>
<SPAN lang=EN-US >doc.insertString(left, word.toUpperCase(), </SPAN><B><SPAN lang=EN-US >null</SPAN></B><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >comp.setSelectionStart(start); </SPAN>
<SPAN lang=EN-US >comp.setSelectionEnd(end);</SPAN>
<SPAN lang=EN-US >} </SPAN><B><SPAN lang=EN-US >catch </SPAN></B><SPAN lang=EN-US >(BadLocationException ble) { </SPAN><B><SPAN lang=EN-US >return</SPAN></B><SPAN lang=EN-US >; }</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >  </SPAN><SPAN lang=EN-US >} </SPAN>
<SPAN lang=EN-US >}</SPAN>

Artigos relacionados