createcmd.html

来自「java类库详细讲解」· HTML 代码 · 共 204 行

HTML
204
字号
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Creating a Custom Editing Command for 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>
    &gt;
    <A HREF="../index.html">List of Packages</A>
    &gt;
    <B><A HREF="../javax.swing.text/pkg.html">javax.swing.text</A></B><font color="#666666" SIZE="-2">
        &nbsp;[49 examples]
        </font>
        &gt;
        <B><A HREF="../javax.swing.text/pkg.html#Actions%20and%20Key%20Bindings">Actions and Key Bindings</A></B><font color="#666666" SIZE="-2">
            &nbsp;[5 examples]
            </font>
</DIV><P>
  <h3>
    e1001.  
    Creating a Custom Editing Command for a JTextComponent</h3>

This example demonstrates how to implement an editing command.
There are two steps when creating a custom command.
The first is to create an action object that executes the
desired functionality and install the action object 
in the component. The second is to bind a keystroke to the action
object using an input map.

<P> Text component actions should extend from <code>TextAction</code>.
<code>TextAction</code> has a convenience method for finding the appropriate
text component to operate on.

<P> This example implements a <font color="#0066ff"><i>Lowercase</i></font> command that converts
characters to lowercase.  If the selection is empty, the command
converts the character following the caret and then moves the caret
forward one space.  If the selection is not empty, the command
converts the characters in the selection.


<pre>
    JTextArea comp = new JTextArea();
    
    // Bind F2 to the lowercase action
    String actionName = <font color="#0066ff"><i>"Lowercase"</i></font>;
    comp.getInputMap().put(KeyStroke.getKeyStroke(<font color="#0066ff"><i>"F2"</i></font>), actionName);
    
    // Install the action
    comp.getActionMap().put(actionName,
        new TextAction(actionName) {
            public void actionPerformed(ActionEvent evt) {
                lowercaseSelection(getTextComponent(evt));
            }
        }
    );
    
    public static void lowercaseSelection(JTextComponent comp) {
        if (comp.getSelectionStart() == comp.getSelectionEnd()) {
            // There is no selection, only a caret
            if (comp.getCaretPosition() &lt; comp.getDocument().getLength()) {
                // The caret must be at least one position left of the end
                try {
                    int pos = comp.getCaretPosition();
                    Document doc = comp.getDocument();
                    String str = doc.getText(pos, 1).toLowerCase();
    
                    doc.remove(pos, 1);
                    doc.insertString(pos, str, null);
                    comp.moveCaretPosition(pos+1);
                } catch (BadLocationException e) {
                }
            }
        } else {
            // There is a selection
            int s = comp.getSelectionStart();
            int e = comp.getSelectionEnd();
    
            comp.replaceSelection(comp.getSelectedText().toLowerCase());
            comp.select(s, e);
        }
    }
</pre>
<P><table width="600" CELLSPACING="0" CELLPADDING="2" BORDER="0">
<tr>
<td bgcolor="#6666cc" align="center"><font color="#ffffff">
            &nbsp;Related Examples
        </font></td>
</tr>
</table>


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

e1002. <a class="eglink" href="OverrideKey.html?l=rel">
    Overriding a Few Default Typed Key Bindings in 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>&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 FACE="Verdana, Arial, Helvetica, sans-serif" SIZE="0">
&copy; 2002 Addison-Wesley.
</FONT>
</BODY>
</HTML>

⌨️ 快捷键说明

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