⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 overridekey.htm

📁 这个压缩包里的都是超级经典的java例子
💻 HTM
字号:
<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">
<META CONTENT="no-cache" HTTP-EQUIV="Pragma">
<LINK href="/almanac.css" media="screen" type="text/css" rel="stylesheet">
</HEAD>
<BODY>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD></TD>
</TR>
</TABLE>
<br>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD></TD>
</TR>
<TR>
<TD rowspan="3"><A HREF="/?l=ex"><IMG BORDER="0" ALIGN="BOTTOM" HSPACE="10" SRC="/egs/almanac14a.jpg"></A></TD><TD VALIGN="top">
<h1>The Java Developers Almanac 1.4</h1>
<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">
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD valign="top"><script type="text/javascript">
<!--
google_ad_client = "pub-6001183370374757";
google_ad_width = 120;
google_ad_height = 600;
google_ad_format = "120x600_as";
google_ad_channel = "4777242811";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "6666CC";
google_color_url = "6666CC";
google_color_text = "000000";
//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script></TD><TD>&nbsp;&nbsp;&nbsp;</TD><TD valign="top">
<DIV ALIGN="LEFT">
<A HREF="/">Home</A>
    &gt;
    <A HREF="../index.html">List of Packages</A>
    &gt;

    
    <A HREF="../javax.swing.text/pkg.html">javax.swing.text</A><font color="#666666" class="xsmall-font">
        &nbsp;[49 examples]
    </font>
        &gt;
        <B><A HREF="../javax.swing.text/pkg.html#Actions and Key Bindings">Actions and Key Bindings</A></B><font color="#666666" class="xsmall-font">
            &nbsp;[5 examples]
            </font>
</DIV><P>
  <h3>e1003. 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 fired 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 inputmap or keymap for that character, the default
action is invoked (which inserts the character into the text
component).

<P> Therefore, to override the behavior of a typed character in a
text component, you bind a TYPED keystroke to the new action in the
text component's inputmap.

<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"><b>e1004</b> Overriding Many Default Typed Key Bindings in a JTextComponent</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">
            &nbsp;<b>Related Examples</b></font></td>
</tr>
</table>


e1001. <a class="eglink" href="OverrideDefAction.html?l=rel">
    Overriding the Default Action of a JTextComponent
</a>
<br>

e1002. <a class="eglink" href="CreateCmd.html?l=rel">
    Creating a Custom Editing Command for a JTextComponent
</a>
<br>

e1004. <a class="eglink" href="OverrideKey2.html?l=rel">
    Overriding Many Default Typed Key Bindings in a JTextComponent
</a>
<br>

e1005. <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>&nbsp;&nbsp;

<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#Events">
    Events
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JEditorPane">
    JEditorPane
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JFormattedTextField">
    JFormattedTextField
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextArea">
    JTextArea
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextComponent">
    JTextComponent
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextField">
    JTextField
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#JTextPane">
    JTextPane
</a>&nbsp;&nbsp;

<a class="eglink" href="/egs/javax.swing.text/pkg.html?l=rel#Styles">
    Styles
</a>&nbsp;&nbsp;

</td>
</tr>
</table>

<br>

<br>
<FONT class="xsmall-font">
&copy; 2002 Addison-Wesley.
</FONT></TD><TD>&nbsp;&nbsp;&nbsp;</TD><TD valign="top"><A href="http://compositesw.com/devzone?ref=javaalmanac"><IMG alt="Click Here" height="600" width="120" border="0" src="/csw_oad_120x600_final.gif"></A></TD>
</TR>
</TABLE>
</BODY>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<META CONTENT="NO-CACHE" HTTP-EQUIV="PRAGMA">
</HEAD>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -