Java Tutorial/Swing/SimpleAttributeSet
Содержание
Add colored text to the document
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.AttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
public class Main extends JTextPane {
public void append(Color c, String s) {
StyleContext sc = StyleContext.getDefaultStyleContext();
AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);
int len = getDocument().getLength();
setCaretPosition(len);
setCharacterAttributes(aset, false);
replaceSelection(s);
}
public static void main(String argv[]) {
Main pane = new Main();
for (int n = 1; n <= 4; n += 1) {
pane.append(Color.black, String.valueOf(n) + " ");
}
JFrame f = new JFrame("ColorPane example");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new JScrollPane(pane));
f.setSize(600, 400);
f.setVisible(true);
}
}
Creating Styled Text: Using a SimpleAttributeSet
Key Constants for Storing AttributeSet Values
AttributeSet Key Constants Value Type Default Setting
CharacterConstants.Background Color Color.BLACK
ColorConstants.Background Color Color.BLACK
CharacterConstants.BidiLevel Integer 0
CharacterConstants.Bold Boolean false
FontConstants.Bold Boolean false
CharacterConstants.ruponentAttribute Component null
CharacterConstants.Family String "Monospaced"
FontConstants.Family String "Monospaced"
CharacterConstants.Foreground Color Color.BLACK
ColorConstants.Foreground Color Color.BLACK
CharacterConstants.IconAttribute Icon null
CharacterConstants.Italic Boolean false
FontConstants.Italic Boolean false
CharacterConstants.Size Integer 12
FontConstants.Size Integer 12
CharacterConstants.StrikeThrough Boolean false
CharacterConstants.Subscript Boolean false
CharacterConstants.Superscript Boolean false
CharacterConstants.Underline Boolean false
ParagraphConstants.Alignment Integer ALIGN_LEFT
ParagraphConstants.FirstLineIndent Float 0
ParagraphConstants.LeftIndent Float 0
ParagraphConstants.LineSpacing Float 0
ParagraphConstants.Orientation unknown unknown
ParagraphConstants.RightIndent Float 0
ParagraphConstants.SpaceAbove Float 0
ParagraphConstants.SpaceBelow Float 0
ParagraphConstants.TabSet TabSet null
Tests two attributed strings for equality.
/*
* JCommon : a free general purpose class library for the Java(tm) platform
*
*
* (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
*
* Project Info: http://www.jfree.org/jcommon/index.html
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*
* [Java is a trademark or registered trademark of Sun Microsystems, Inc.
* in the United States and other countries.]
*
* ------------------------------
* AttributedStringUtilities.java
* ------------------------------
* (C)opyright 2005, by Object Refinery Limited and Contributors.
*
* Original Author: David Gilbert (for Object Refinery Limited);
* Contributor(s): -;
*
* $Id: AttributedStringUtilities.java,v 1.2 2005/10/18 13:24:19 mungady Exp $
*
* Changes
* -------
* 29-Jul-2005 : Version 1(DG);
*
*/
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
import java.text.CharacterIterator;
import java.util.Map;
/**
* Some utility methods for working with <code>AttributedString</code>
* objects.
*
* @author David Gilbert
*/
public class AttributedStringUtilities {
/**
* Tests two attributed strings for equality.
*
* @param s1
* string 1 (<code>null</code> permitted).
* @param s2
* string 2 (<code>null</code> permitted).
*
* @return <code>true</code> if <code>s1</code> and <code>s2</code> are
* equal or both <code>null</code>, and <code>false</code>
* otherwise.
*/
public static boolean equal(AttributedString s1, AttributedString s2) {
if (s1 == null) {
return (s2 == null);
}
if (s2 == null) {
return false;
}
AttributedCharacterIterator it1 = s1.getIterator();
AttributedCharacterIterator it2 = s2.getIterator();
char c1 = it1.first();
char c2 = it2.first();
int start = 0;
while (c1 != CharacterIterator.DONE) {
int limit1 = it1.getRunLimit();
int limit2 = it2.getRunLimit();
if (limit1 != limit2) {
return false;
}
// if maps aren"t equivalent, return false
Map m1 = it1.getAttributes();
Map m2 = it2.getAttributes();
if (!m1.equals(m2)) {
return false;
}
// now check characters in the run are the same
for (int i = start; i < limit1; i++) {
if (c1 != c2) {
return false;
}
c1 = it1.next();
c2 = it2.next();
}
start = limit1;
}
return c2 == CharacterIterator.DONE;
}
}
Use SimpleAttributeSet with JTextPane
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
public class Main extends JTextPane {
public void appendNaive(Color c, String s) {
SimpleAttributeSet aset = new SimpleAttributeSet();
StyleConstants.setForeground(aset, c);
int len = getText().length();
setCaretPosition(len);
setCharacterAttributes(aset, false);
replaceSelection(s);
}
public static void main(String argv[]) {
Main pane = new Main();
for (int n = 1; n <= 4; n += 1) {
pane.appendNaive(Color.black, String.valueOf(n) + " ");
}
JFrame f = new JFrame("ColorPane example");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new JScrollPane(pane));
f.setSize(600, 400);
f.setVisible(true);
}
}
Using StyleConstants class to simplify style sttribute settings
- The StyleConstants class is full of helper methods to simplify setting attribute sets.
- Instead of calling the following to make the SimpleAttributeSet both bold and italic:
attributes.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE)
attributes.addAttribute(StyleConstants.CharacterConstants.Italic, Boolean.TRUE)