Java Tutorial/Swing/SimpleAttributeSet

Материал из Java эксперт
Версия от 15:34, 31 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

  1. The StyleConstants class is full of helper methods to simplify setting attribute sets.
  2. 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)