JEditorPane和HTML包装8 : 文字编辑模板 « 图形用户界面 « 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 » 图形用户界面 » 文字编辑模板屏幕截图 
JEditorPane和HTML包装8
JEditorPane和HTML包装8
  
/*
Core SWING Advanced Programming 
By Kim Topley
ISBN: 0 13 083292 8       
Publisher: Prentice Hall  
*/

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URL;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.EditorKit;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;

public class EditorPaneExample8 {
  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 baseClass = EditorPaneExample8.class;
    URL url = baseClass.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("Saving Data in Various Formats");

    // 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);
    }

    JScrollPane scrollPane = new JScrollPane(pane);
    scrollPane.setPreferredSize(new Dimension(500250));
    f.getContentPane().add(scrollPane, "Center");

    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    JButton button = new JButton("Save");
    final JCheckBox plain = new JCheckBox("Plain Text");
    final JCheckBox html new JCheckBox("HTML");
    final JCheckBox rtf = new JCheckBox("RTF");
    panel.add(plain);
    panel.add(html);
    panel.add(rtf);

    ButtonGroup group = new ButtonGroup();
    group.add(plain);
    group.add(html);
    group.add(rtf);
    plain.setSelected(true);

    panel.add(Box.createVerticalStrut(10));
    panel.add(button);
    panel.add(Box.createVerticalGlue());
    panel.setBorder(BorderFactory.createEmptyBorder(2424));
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        Writer w = null;
        OutputStream os = System.out;
        String contentType;
        if (plain.isSelected()) {
          contentType = "text/plain";
          w = new OutputStreamWriter(os);
        else if (html.isSelected()) {
          contentType = "text/html";
          w = new OutputStreamWriter(os);
        else {
          contentType = "text/rtf";
        }

        EditorKit kit = pane.getEditorKitForContentType(contentType);
        try {
          if (w != null) {
            kit.write(w, pane.getDocument()0, pane.getDocument()
                .getLength());
            w.flush();
          else {
            kit.write(os, pane.getDocument()0, pane.getDocument()
                .getLength());
            os.flush();
          }
        catch (Exception e) {
          System.out.println("Write failed");
        }
      }
    });
    f.getContentPane().add(panel, "East");
    f.pack();
    f.setVisible(true);
  }

  // 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,
          " ") }) };
}


           
         
    
  
Related examples in the same category
1. 查看RTF格式查看RTF格式
2. EditorPane样本EditorPane样本
3. Setting the Font and Color of Text in a JTextPane Using Styles: Makes text red
4. Setting the Font and Color of Text in a JTextPane Using Styles: Inherits from "Red"; makes text red and underlined
5. Setting the Font and Color of Text in a JTextPane Using Styles: Makes text 24pts
6. Setting the Font and Color of Text in a JTextPane Using Styles: Makes text italicized
7. JEditorPane和HTML封装JEditorPane和HTML封装
8. JEditorPane和HTML包2JEditorPane和HTML包2
9. JEditorPane和HTML包3JEditorPane和HTML包3
10. JEditorPane和HTML包4JEditorPane和HTML包4
11. JEditorPane和HTML包5JEditorPane和HTML包5
12. JEditorPane和HTML包6JEditorPane和HTML包6
13. JEditorPane和HTML包装7JEditorPane和HTML包装7
14. JEditorPane和HTML封装9JEditorPane和HTML封装9
15. EditorPane例如10EditorPane例如10
16. JEditorPane实例10 -使用getIteratorJEditorPane实例10 -使用getIterator
17. JEditorPane实例11JEditorPane实例11
18. JEditorPane实例12JEditorPane实例12
19. JEditorPane实例13JEditorPane实例13
20. JEditorPane实例14JEditorPane实例14
21. JEditorPane实例15JEditorPane实例15
22. JEditorPane实例16JEditorPane实例16
23. JEditorPane实例17JEditorPane实例17
24. JEditorPane实例18JEditorPane实例18
25. JEditorPane实例19JEditorPane实例19
26. JEditorPane实例20JEditorPane实例20
27. JEditorPane和HyperlinkListener演示
28. Create a right-aligned tab stop at 200 pixels from the left margin
29. Create a center-aligned tab stop at 300 pixels from the left margin
30. Create a decimal-aligned tab stop at 400 pixels from the left margin
31. 使用SimpleAttributeSet与JTextPane
32. 查看HTML
33. 查看网页
34. Change mouse cursor during mouse-over action on hyperlinks
35. 创建一个简单的浏览器
36. 新增彩色文本
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.