Mega Code Archive

 
Categories / Java / Swing JFC
 

JTextPane Styles Example 6

/* Core SWING Advanced Programming  By Kim Topley ISBN: 0 13 083292 8        Publisher: Prentice Hall   */ import javax.swing.*; import javax.swing.text.*; import java.awt.*; public class StylesExample6 {   public static void main(String[] args) {     try {         UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");     } catch (Exception evt) {}        JFrame f = new JFrame("Styles Example 6");          // Create the StyleContext, the document and the pane     StyleContext sc = new StyleContext();     final DefaultStyledDocument doc = new DefaultStyledDocument(sc);     final JTextPane pane = new JTextPane(doc);          // Create and add the main document style     Style defaultStyle = sc.getStyle(StyleContext.DEFAULT_STYLE);     final Style mainStyle = sc.addStyle("MainStyle", defaultStyle);     StyleConstants.setLeftIndent(mainStyle, 16);     StyleConstants.setRightIndent(mainStyle, 16);     StyleConstants.setFirstLineIndent(mainStyle, 16);     StyleConstants.setFontFamily(mainStyle, "serif");     StyleConstants.setFontSize(mainStyle, 12);     // Create and add the constant width style     final Style cwStyle = sc.addStyle("ConstantWidth", null);     StyleConstants.setFontFamily(cwStyle, "monospaced");     StyleConstants.setForeground(cwStyle, Color.green);     // Create and add the heading style     final Style heading2Style = sc.addStyle("Heading2", null);     StyleConstants.setForeground(heading2Style, Color.red);     StyleConstants.setFontSize(heading2Style, 16);     StyleConstants.setFontFamily(heading2Style, "serif");     StyleConstants.setBold(heading2Style, true);     StyleConstants.setLeftIndent(heading2Style, 8);     StyleConstants.setFirstLineIndent(heading2Style, 0);          try {       SwingUtilities.invokeAndWait(new Runnable() {         public void run() {           try {             // Set the logical style             doc.setLogicalStyle(0, mainStyle);             // Add the text to the document             doc.insertString(0, text, null);             // Apply the character attributes             doc.setCharacterAttributes(49, 13, cwStyle, false);             doc.setCharacterAttributes(223, 14, cwStyle, false);             doc.setCharacterAttributes(249, 14, cwStyle, false);             doc.setCharacterAttributes(286, 8, cwStyle, false);             doc.setCharacterAttributes(475, 14, cwStyle, false);             doc.setCharacterAttributes(497, 21, cwStyle, false);             doc.setCharacterAttributes(557, 9, cwStyle, false);             doc.setCharacterAttributes(639, 12, cwStyle, false);             doc.setCharacterAttributes(733, 21, cwStyle, false);             doc.setCharacterAttributes(759, 9, cwStyle, false);             // Finally, apply the style to the heading             doc.setParagraphAttributes(0, 1, heading2Style, false);             // Set the foreground color and change the font             pane.setForeground(Color.pink);             pane.setFont(new Font("Monospaced", Font.ITALIC, 24));           } catch (BadLocationException e) {           }         }       });     } catch (Exception e) {       System.out.println("Exception when constructing document: " + e);       System.exit(1);     }     f.getContentPane().add(new JScrollPane(pane));     f.setSize(400, 300);     f.setVisible(true);   }   public static final String text =            "Attributes, Styles and Style Contexts\n" +           "The simple PlainDocument class that you saw in the previous " +            "chapter is only capable of holding text. The more complex text " +           "components use a more sophisticated model that implements the " +           "StyledDocument interface. StyledDocument is a sub-interface of " +           "Document that contains methods for manipulating attributes that " +           "control the way in which the text in the document is displayed. " +           "The Swing text package contains a concrete implementation of " +           "StyledDocument called DefaultStyledDocument that is used as the " +           "default model for JTextPane and is also the base class from which " +           "more specific models, such as the HTMLDocument class that handles " +           "input in HTML format, can be created. In order to make use of " +           "DefaultStyledDocument and JTextPane, you need to understand how " +           "Swing represents and uses attributes.\n"; }