?? overridekey.html
字號:
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Overriding a Few Default Typed Key Bindings in a JTextComponent
(Java Developers Almanac Example)
</TITLE>
<META CONTENT="Patrick Chan" NAME="AUTHOR">
<META CONTENT="Code Examples from The Java Developers Almanac 1.4" NAME="DESCRIPTION">
<META CONTENT="Addison-Wesley/Patrick Chan" NAME="OWNER">
<META CONTENT="3/20/02" NAME="revision">
<STYLE TYPE="text/css">
<!-- BODY CODE {font-family: Courier, Monospace; font-size: 11pt} TABLE, BODY {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt} PRE {font-family: Courier, Monospace; font-size: 10pt} H3 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11pt} A.eglink {text-decoration: none} A:hover.eglink {text-decoration: underline} -->
</STYLE>
</HEAD>
<BODY>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD rowspan="3"><A HREF="/?l=ex"><IMG BORDER="0" ALIGN="BOTTOM" HSPACE="10" SRC="/egs/almanac14a.jpg"></A></TD><TD VALIGN="top"><font face="Times" size="6"><b>The Java Developers Almanac 1.4</b></font>
<br>
Order this book from <a href="/cgi-bin/scripts/redirect.pl?l=ex&url=http://www.amazon.com/exec/obidos/ASIN/0201752808/xeo">Amazon</a>.
</TD>
</TR>
<TR>
<TD align="right" valign="bottom">
<FORM method="get" action="/cgi-bin/search/find.pl">
<INPUT size="25" name="words" type="text"><INPUT value="Search" type="submit">
</FORM>
</TD>
</TR>
</TABLE>
<HR color="#6666cc">
<DIV ALIGN="LEFT">
<A HREF="/">Home</A>
>
<A HREF="../index.html">List of Packages</A>
>
<B><A HREF="../javax.swing.text/pkg.html">javax.swing.text</A></B><font color="#666666" SIZE="-2">
[49 examples]
</font>
>
<B><A HREF="../javax.swing.text/pkg.html#Actions%20and%20Key%20Bindings">Actions and Key Bindings</A></B><font color="#666666" SIZE="-2">
[5 examples]
</font>
</DIV><P>
<h3>
e1002.
Overriding a Few Default Typed Key Bindings in a JTextComponent</h3>
Hitting a key on the keyboard can fire one of three types of key
events - <code>KeyEvent.PRESSED</code>, <code>KeyEvent.TYPED</code>, or
<code>KeyEvent.RELEASED</code>. Briefly, hitting a key will first fire a
PRESSED key event for the key and then, if the key represents an ASCII
character (e.g. 'a' or 'control-f'), a TYPED key event containing the
character is fire as well. When the key is released, the RELEASED key
event is fired.
<P> Rather than have an action and key bindings for every ASCII
character, a text component uses a single default action installed in
its keymap. When an ASCII character is typed and no key binding
exists in any input map or keymap for that character, the default
action is invoked (which inserts the character into the text
component).
<P> Therefore, to override the behaviour of a typed character in a
text component, you bind a TYPED keystroke to the new action in the
text component's input map.
<P> There are two ways to override the default key bindings in a
<code>JTextComponent</code>. This example demonstrates a technique for overriding a
few characters. See <a href="../javax.swing.text/OverrideKey2.html" class="eglink"><font size="-1"><b>e1003</b> Overriding Many Default Typed Key Bindings in a JTextComponent</font></a> for a
technique suitable for overriding many characters.
<pre>
JTextField component = new JTextField(10);
// Override a, A, 9, -, $
component.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(<font color="#0066ff"><i>"typed a"</i></font>), <font color="#0066ff"><i>"actionName"</i></font>);
component.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(<font color="#0066ff"><i>"typed A"</i></font>), <font color="#0066ff"><i>"actionName"</i></font>);
component.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(<font color="#0066ff"><i>"typed 9"</i></font>), <font color="#0066ff"><i>"actionName"</i></font>);
component.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(<font color="#0066ff"><i>"typed -"</i></font>), <font color="#0066ff"><i>"actionName"</i></font>);
component.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(<font color="#0066ff"><i>"typed $"</i></font>), <font color="#0066ff"><i>"actionName"</i></font>);
// Overriding space must be done this way
component.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(<font color="#0066ff"><i>new Character(' ')</i></font>, 0), <font color="#0066ff"><i>"actionName"</i></font>);
// Disable a character so that no action is invoked.
// The action name "none" is conventionally used to mean no action.
component.getInputMap(JComponent.WHEN_FOCUSED).put(
KeyStroke.getKeyStroke(<font color="#0066ff"><i>"typed X"</i></font>), "none");
// If you want to bind a keystroke to shift-space (which generates
// a space character), you need to use a pressed-type keystroke.
component.getInputMap(JComponent.WHEN_FOCUSED).put(
KeyStroke.getKeyStroke(<font color="#0066ff"><i>"shift pressed SPACE"</i></font>), <font color="#0066ff"><i>"actionName"</i></font>);
// However, the above is not sufficient. Although it binds
// the action to shift-space, it does not mask the generated
// space character. So, not only will the action be invoked, a
// space character will be inserted into the text component.
// You need to disable the typed space character.
// This will prevent the space from being inserted when shift-space
// is pressed.
component.getInputMap(JComponent.WHEN_FOCUSED).put(
KeyStroke.getKeyStroke(<font color="#0066ff"><i>new Character(' ')</i></font>, 0), "none");
// But if you still want a non-modified spaced key to insert
// a space, you need to add a pressed-type keystroke for space.
component.getInputMap(JComponent.WHEN_FOCUSED).put(
KeyStroke.getKeyStroke(<font color="#0066ff"><i>"pressed SPACE"</i></font>), insertSpaceAction.getValue(Action.NAME));
// Add action
component.getActionMap().put(insertSpaceAction.getValue(Action.NAME), insertSpaceAction);
public Action insertSpaceAction = new AbstractAction("Insert Space") {
public void actionPerformed(ActionEvent evt) {
JTextComponent c = (JTextComponent)evt.getSource();
try {
c.getDocument().insertString(c.getCaretPosition(), " ", null);
} catch (BadLocationException e) {
}
}
};
</pre>
<P><table width="600" CELLSPACING="0" CELLPADDING="2" BORDER="0">
<tr>
<td bgcolor="#6666cc" align="center"><font color="#ffffff">
Related Examples
</font></td>
</tr>
</table>
e1000. <a class="eglink" href="OverrideDefAction.html?l=rel">
Overriding the Default Action of a JTextComponent
</a>
<br>
e1001. <a class="eglink" href="CreateCmd.html?l=rel">
Creating a Custom Editing Command for a JTextComponent
</a>
<br>
e1003. <a class="eglink" href="OverrideKey2.html?l=rel">
Overriding Many Default Typed Key Bindings in a JTextComponent
</a>
<br>
e1004. <a class="eglink" href="ListTextKeys.html?l=rel">
Listing the Key Bindings in a JTextComponent Keymap
</a>
<br>
<table width="600" CELLSPACING="0" CELLPADDING="2" BORDER="0">
<tr>
<td align="left">
<br>
See also:
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#Caret%20and%20Selection">
Caret and Selection
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#Events">
Events
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JEditorPane">
JEditorPane
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JFormattedTextField">
JFormattedTextField
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextArea">
JTextArea
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextComponent">
JTextComponent
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextField">
JTextField
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextPane">
JTextPane
</a>
<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#Styles">
Styles
</a>
</td>
</tr>
</table>
<br>
<br>
<FONT FACE="Verdana, Arial, Helvetica, sans-serif" SIZE="0">
© 2002 Addison-Wesley.
</FONT>
</BODY>
</HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -