TextPane视图2 : 文本面板 « 图形用户界面 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 图形用户界面 » 文本面板屏幕截图 
TextPane视图2
TextPane视图2
  
/*
Core SWING Advanced Programming 
By Kim Topley
ISBN: 0 13 083292 8       
Publisher: Prentice Hall  
*/

import java.awt.Color;
import java.awt.Font;
import java.io.PrintStream;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.View;

public class TextPaneViews {
  public static void createDocumentStyles(StyleContext sc) {
    Style defaultStyle = sc.getStyle(StyleContext.DEFAULT_STYLE);

    // Create and add the main document style
    Style mainStyle = sc.addStyle(mainStyleName, 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
    Style cwStyle = sc.addStyle(charStyleName, null);
    StyleConstants.setFontFamily(cwStyle, "monospaced");
    StyleConstants.setForeground(cwStyle, Color.green);

    // Create and add the heading style
    Style heading2Style = sc.addStyle(heading2StyleName, 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);

    // Create and add the Component style
    Class thisClass = TextPaneViews.class;
    URL url = thisClass.getResource("java2s.gif");
    ImageIcon icon = new ImageIcon(url);
    JLabel comp = new JLabel("Displaying text with attributes", icon,
        JLabel.CENTER);
    comp.setVerticalTextPosition(JLabel.BOTTOM);
    comp.setHorizontalTextPosition(JLabel.CENTER);
    comp.setFont(new Font("serif", Font.BOLD | Font.ITALIC, 14));
    Style componentStyle = sc.addStyle(componentStyleName, null);
    StyleConstants.setComponent(componentStyle, comp);

    // The paragraph style for the component
    Style compParagraphStyle = sc.addStyle(compParaName, null);
    StyleConstants.setSpaceAbove(compParagraphStyle, (float16.0);
  }

  public static void addText(JTextPane pane, StyleContext sc,
      Style logicalStyle, Paragraph[] content) {
    // The outer loop adds paragraphs, while the
    // inner loop adds character runs.
    int paragraphs = content.length;
    for (int i = 0; i < paragraphs; i++) {
      Run[] runs = content[i].content;
      for (int j = 0; j < runs.length; j++) {
        pane.setCharacterAttributes(
            runs[j].styleName == null ? SimpleAttributeSet.EMPTY
                : sc.getStyle(runs[j].styleName)true);
        pane.replaceSelection(runs[j].content);
      }

      // At the end of the paragraph, add the logical style and
      // any overriding paragraph style and then terminate the
      // paragraph with a newline.
      pane.setParagraphAttributes(SimpleAttributeSet.EMPTY, true);

      if (logicalStyle != null) {
        pane.setLogicalStyle(logicalStyle);
      }

      if (content[i].styleName != null) {
        pane.setParagraphAttributes(sc.getStyle(content[i].styleName),
            false);
      }

      pane.replaceSelection("\n");
    }
  }

  public static void main(String[] args) {
    try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    catch (Exception evt) {}
  
    JFrame f = new JFrame("Text Pane Views");

    // Create the StyleContext, the document and the pane
    final StyleContext sc = new StyleContext();
    final DefaultStyledDocument doc = new DefaultStyledDocument(sc);
    final JTextPane pane = new JTextPane(doc);

    // Build the styles
    createDocumentStyles(sc);

    try {
      // Add the text and apply the styles
      SwingUtilities.invokeAndWait(new Runnable() {
        public void run() {
          // Add the text
          addText(pane, sc, sc.getStyle(mainStyleName), content);
        }
      });
    catch (Exception e) {
      System.out.println("Exception when constructing document: " + e);
      System.exit(1);
    }

    f.getContentPane().add(new JScrollPane(pane));
    f.setSize(500300);
    f.setVisible(true);

    try {
      // Dump the view structure
      Thread.sleep(30000);
      ViewDisplayer.displayViews(pane, System.out);
    catch (InterruptedException e) {
    }
    System.out.flush();
    System.exit(0);
  }

  // Style names
  public static final String mainStyleName = "MainStyle";

  public static final String heading2StyleName = "Heading2";

  public static final String charStyleName = "ConstantWidth";

  public static final String componentStyleName = "Component";

  public static final String compParaName = "CompPara";

  // Inner classes used to define paragraph structure
  public static class Run {
    public Run(String styleName, String content) {
      this.styleName = styleName;
      this.content = content;
    }

    public String styleName;

    public String content;
  }

  public static class Paragraph {
    public Paragraph(String styleName, Run[] content) {
      this.styleName = styleName;
      this.content = content;
    }

    public String styleName;

    public Run[] content;
  }

  public static final Paragraph[] content = new Paragraph[] {
      new Paragraph(heading2StyleName, new Run[] { new Run(null,
          "Attributes, Styles and Style Contexts") }),
      new Paragraph(
          null,
          new Run[] {
              new Run(null, "The simple "),
              new Run(charStyleName, "PlainDocument"),
              new Run(
                  null,
                  " 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 "),
              new Run(charStyleName, "StyledDocument"),
              new Run(null, " interface. "),
              new Run(charStyleName, "StyledDocument"),
              new Run(null, " is a sub-interface of "),
              new Run(charStyleName, "Document"),
              new Run(
                  null,
                  " 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 "),
              new Run(charStyleName, "StyledDocument"),
              new Run(null, " called "),
              new Run(charStyleName, "DefaultStyledDocument"),
              new Run(null,
                  " that is used as the default model for "),
              new Run(charStyleName, "JTextPane"),
              new Run(
                  null,
                  " and is also the base class from which "
                      "more specific models, such as the "),
              new Run(charStyleName, "HTMLDocument"),
              new Run(
                  null,
                  " class that handles input in HTML format, can be "
                      "created. In order to make use of "),
              new Run(charStyleName, "DefaultStyledDocument"),
              new Run(null, " and "),
              new Run(charStyleName, "JTextPane"),
              new Run(null,
                  " you need to understand how Swing represents "
                      "and uses attributes.") }),
      new Paragraph(compParaName, new Run[] { new Run(componentStyleName,
          " ") }) };
}

class ViewDisplayer {
  public static void displayViews(JTextComponent comp, PrintStream out) {
    View rootView = comp.getUI().getRootView(comp);
    displayView(rootView, 0, comp.getDocument(), out);
  }

  public static void displayView(View view, int indent, Document doc,
      PrintStream out) {
    String name = view.getClass().getName();
    for (int i = 0; i < indent; i++) {
      out.print("\t");
    }

    int start = view.getStartOffset();
    int end = view.getEndOffset();
    out.println(name + "; offsets [" + start + ", " end "]");
    int viewCount = view.getViewCount();
    if (viewCount == 0) {
      int length = Math.min(32end - start);
      try {
        String txt = doc.getText(start, length);
        for (int i = 0; i < indent + 1; i++) {
          out.print("\t");
        }
        out.println("[" + txt + "]");
      catch (BadLocationException e) {
      }
    else {
      for (int i = 0; i < viewCount; i++) {
        displayView(view.getView(i), indent + 1, doc, out);
      }
    }
  }
}


           
         
    
  
Related examples in the same category
1. TextPane样本TextPane样本
2. JEditorPane基础上的浏览器JEditorPane基础上的浏览器
3. JTextPane demo with various format and html loading and renderingJTextPane demo with various format and html loading and rendering
4. 格式文本格式文本
5. EditorPane试验EditorPane试验
6. 添加到TextPane添加到TextPane
7. 文字组件文字组件
8. JTextPane样式范例1JTextPane样式范例1
9. JTextPane样式示例2JTextPane样式示例2
10. JTextPane样式示例3JTextPane样式示例3
11. JTextPane样式范例4JTextPane样式范例4
12. JTextPane样式示例5JTextPane样式示例5
13. JTextPane样式范例6JTextPane样式范例6
14. JTextPane样式范例7JTextPane样式范例7
15. JTextPane样式范例8JTextPane样式范例8
16. JTextPane高亮突出范例JTextPane高亮突出范例
17. JTextPane扩展段
18. TextPane元素TextPane元素
19. HTML值HTML值
20. 查看HTML文档
21. 查看HTML视图
22. JEditorPane阅读器JEditorPane阅读器
23. 双向文本双向文本
24. TextPane: DocumentEvent TextPane: DocumentEvent
25. 图标,组件和文字可以被添加到JTextPane图标,组件和文字可以被添加到JTextPane
26. 括号匹配括号匹配
27. TabSet和JTextPaneTabSet和JTextPane
28. Extension of JTextPane that allows the user to easily append colored text to the documentExtension of JTextPane that allows the user to easily append colored text to the document
29. An implementation of HighlightPainter that underlines text with a thick lineAn implementation of HighlightPainter that underlines text with a thick line
30. An example of highlighting multiple, discontiguous regions of a text component.An example of highlighting multiple, discontiguous regions of a text component.
31. 自定义加字符自定义加字符
32. 遍历段落, JTextPane组件
33. 插入图片到JTextPane组件
34. 插入组件到JTextPane组件
35. 自定义标签JTextPane组件
36. 共享样式与JTextPanes
37. 风格列表,与JTextPane
38. 列出样式属性
39. 更换风格
40. 设置风格;取代段落样式
41. 获得风格和恢复新的段落样式
42. Determining If a Style Attribute Applies to a Character or the Paragraph
43. Determine if the attribute is a color or a font-related attribute.
44. 创建一个停止标签
45. 前景颜色
46. 背景颜色
47. 更改字体大小JTextPane
48. 字体家族
49. 粗体
50. An example of several text components including password fields and formatted fields.An example of several text components including password fields and formatted fields.
51. A style can have multiple attributes; this one makes text bold and italic
52. 重复式样
53. 斜体全段
54. 在JTextPane组件插入样式文本
55. A separation of a data from the visual representation. In a JTextPane component, we have a StyledDocument for setting the style of the text data.
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.