?? style_modstyle.html
字號(hào):
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Automatically Updating Styled Text When a Style Is Updated
(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} -->
</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#Styles">Styles</A></B><font color="#666666" SIZE="-2">
[9 examples]
</font>
</DIV><P>
<h3>
e1012.
Automatically Updating Styled Text When a Style Is Updated</h3>
When a style is applied to text in a text pane, the text is set with
the attributes of the style. If the style is changed, the set of
attributes associated with the range of text does not change.
<P> This example demonstrates how to have styled text automatically
updated when the style object used to style the text is changed. When
a named style is applied to text, the name of the style is included in
the set of attributes that are associated with the text. Hence it is
possible to find all the places where a named style has been applied
in a text pane. The <code>reapplyStyle()</code> method takes a style object
and searches the text pane for all uses the style (by name) and
reapplies the style.
<P> In order to detect changes to a style, a change listener is
added to the style. Whenever the style is changed, the style's change
listener will call <code>reapplyStyle()</code> to update the text pane.
<pre>
final JTextPane textPane = new JTextPane();
ChangeListener changeListener = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
reapplyStyles(textPane, (Style)e.getSource());
}
};
// Make paragraph red
Style style = textPane.addStyle("Highlight", null);
style.addChangeListener(changeListener);
StyleConstants.setForeground(style, <font color="#0066ff"><i>Color.red</i></font>);
textPane.setParagraphAttributes(style, true);
// paragraph appears red
style = textPane.getStyle("Highlight");
StyleConstants.setUnderline(style, <font color="#0066ff"><i>true</i></font>);
// paragraph becomes red and underlined
// This method traverses every paragraph and content element
// and reapplies any style that matches the specified style
public static void reapplyStyles(JTextPane c, Style style) {
// Get section element
Element sectionElem = c.getDocument().getDefaultRootElement();
// Get number of paragraphs.
int paraCount = sectionElem.getElementCount();
for (int i=0; i<paraCount; i++) {
Element paraElem = sectionElem.getElement(i);
AttributeSet attr = paraElem.getAttributes();
// Get the name of the style applied to this paragraph element; may be null
String sn = (String)attr.getAttribute(StyleConstants.NameAttribute);
// Check if style name match
if (style.getName().equals(sn)) {
// Reapply the paragraph style
int rangeStart = paraElem.getStartOffset();
int rangeEnd = paraElem.getEndOffset();
c.getStyledDocument().setParagraphAttributes(
rangeStart, rangeEnd-rangeStart, style, true);
}
// Enumerate the content elements
for (int j=0; j<paraElem.getElementCount(); j++) {
Element contentElem = paraElem.getElement(j);
attr = contentElem.getAttributes();
// Get the name of the style applied to this content element; may be null
sn = (String)attr.getAttribute(StyleConstants.NameAttribute);
// Check if style name match
if (style.getName().equals(sn)) {
// Reapply the content style
int rangeStart = contentElem.getStartOffset();
int rangeEnd = contentElem.getEndOffset();
c.getStyledDocument().setCharacterAttributes(
rangeStart, rangeEnd-rangeStart, style, true);
}
}
}
}
</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>
e1005. <a class="eglink" href="style_HiliteWords.html?l=rel">
Highlighting Words in a JTextComponent
</a>
<br>
e1006. <a class="eglink" href="style_HiliteWords2.html?l=rel">
Setting the Font and Color of Text in a JTextPane Using Styles
</a>
<br>
e1007. <a class="eglink" href="style_ShareStyleContext.html?l=rel">
Sharing Styles Between JTextPanes
</a>
<br>
e1008. <a class="eglink" href="style_ListStyles.html?l=rel">
Listing the Styles Associated with a JTextPane
</a>
<br>
e1009. <a class="eglink" href="style_ListAttr.html?l=rel">
Listing the Attributes in a Style
</a>
<br>
e1010. <a class="eglink" href="style_ListStyles2.html?l=rel">
Using a Popup to Apply Styles to a JTextPane
</a>
<br>
e1011. <a class="eglink" href="style_SetPara.html?l=rel">
Retaining the Logical Style When Setting a New Paragraph Style
</a>
<br>
e1013. <a class="eglink" href="style_IsCharPara.html?l=rel">
Determining If a Style Attribute Applies to a Character or the Paragraph
</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#Actions%20and%20Key%20Bindings">
Actions and Key Bindings
</a>
<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>
</td>
</tr>
</table>
<br>
<br>
<FONT FACE="Verdana, Arial, Helvetica, sans-serif" SIZE="0">
© 2002 Addison-Wesley.
</FONT>
</BODY>
</HTML>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -