enumpara.html

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

HTML
150
字号
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Enumerating the Lines and Paragraphs of 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">
<!--     CODE {font-family: Courier, Monospace;          font-size: 12pt}    PRE {font-family: Courier, Monospace;         font-size: 11pt}    BODY {font-size: 10pt}    -->
</STYLE>
</HEAD>
<BODY>
<TR>
<TD></TD>
</TR>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD><A HREF="/?l=ex"><IMG BORDER="0" ALIGN="BOTTOM" HSPACE="10" SRC="../almanac14a.jpg"></A></TD><TD VALIGN="MIDDLE">
<H1>The Java Developers Almanac 1.4</H1>
    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>
</TABLE>
<HR>
<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">
<TR>
<TD><FONT FACE="Verdana, Arial, Helvetica, sans-serif">
<DIV ALIGN="LEFT">
<FONT FACE="Verdana, Arial, Helvetica, sans-serif" SIZE="3"><A HREF="../../index.html">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="-1">
        &nbsp;[ examples]
        </font></FONT>
</DIV>
<P></P>
  
<h3>
    e894.  
    Enumerating the Lines and Paragraphs of a JTextComponent</h3>

The contents of a text component are stored in a <code>Document</code> object which
in turn breaks the content up into a hierarchy of <code>Element</code> objects. 

<p></p> In the case of a text area, each line of text (a contiguous
span of characters terminated by a single newline) is stored in a
content element.  For example, if the last line of the contents is
terminated by a newline and there are 100 new lines, there will be 100
content elements.  All content elements are stored under a single
paragraph element.

<p></p> In the case of a text pane, the content elements contain
``runs'' of characters.  A run of characters is a contiguous span of
characters with the same attributes. Adjacent runs of characters will
have different sets of attributes.  If the attributes of one run is
modified so that it becomes identical to an adjacent run, both runs
will be combined to a single run.

<p></p> Adjacent runs that make up a line of text (a contiguous span of
characters terminated by a single newline) are stored under one
paragraph element.  In other words, a paragraph element will have at
most one run (the last run) with a single newline (only the last line
of the contents may or may not have a newline). Note that the
adjacency rule does not apply to runs in different paragraph elements.

<p></p> Finally, all paragraph elements in a text pane
are stored under a single section element.


<pre>
    // Enumerate the lines in a text area
    JTextArea textArea = new JTextArea();
    
    // Get paragraph element
    Element paragraph = textArea.getDocument().getDefaultRootElement();
    
    // Get number of content elements
    int contentCount = paragraph.getElementCount();
    
    // Get index ranges for each content element.
    // Each content element represents one line.
    // Each line includes the terminating newline.
    for (int i=0; i&lt;contentCount; i++) {
        Element e = paragraph.getElement(i);
        int rangeStart = e.getStartOffset();
        int rangeEnd = e.getEndOffset();
        try {
            String line = textArea.getText(rangeStart, rangeEnd-rangeStart);
        } catch (BadLocationException ex) {
        }
    }
    
    
    // Enumerate the paragraphs in a text pane
    JTextPane textPane = new JTextPane();
    
    // Get section element
    Element section = textPane.getDocument().getDefaultRootElement();
    
    // Get number of paragraphs.
    // In a text pane, a span of characters terminated by single
    // newline is typically called a paragraph.
    int paraCount = section.getElementCount();
    
    // Get index ranges for each paragraph
    for (int i=0; i&lt;paraCount; i++) {
        Element e = section.getElement(i);
        int rangeStart = e.getStartOffset();
        int rangeEnd = e.getEndOffset();
        try {
            String para = textPane.getText(rangeStart, rangeEnd-rangeStart);
        } catch (BadLocationException ex) {
        }
    }
</pre>

<P></P>
<FONT FACE="Verdana, Arial, Helvetica, sans-serif" SIZE="0">
&copy; 2002 Addison-Wesley.
</FONT></FONT></TD>
</TR>
</TABLE>
<br>
<hr>
<FORM method="get" action="/cgi-bin/search/find.pl">
<table width="100%">
<tr>
<b>Search</b>: 
<INPUT size="40" name="words" type="text"><INPUT value="Search" name="submit" type="submit">
</tr>
<tr>
<font size="-1">
&nbsp;&nbsp;&nbsp;&nbsp;(e.g. "cache", "parse xml dom", "java.lang.String", "java.lang.String.substring", "String.substring", "substring")
</font>
</tr>
</table>
</FORM>
</BODY>
</HTML>

⌨️ 快捷键说明

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