【问题标题】:setting JTextPane to content type HTML and using string builders将 JTextPane 设置为内容类型 HTML 并使用字符串构建器
【发布时间】:2012-02-22 16:34:52
【问题描述】:

我正在使用字符串构建器将文本附加到我的 JTextPane,我已将内容类型设置为 pane.setContentType("text/html");,但我的 JTextPane 上实际上没有出现任何文本。

这是我的追加示例:

buildSomething.append("<b style=\"color:pink\">"+Birthday+"</span>");

我做错了什么吗?我该如何解决它?

【问题讨论】:

    标签: java html swing jtextpane text-decorations


    【解决方案1】:

    每次调用JTextPane.setText(...) 都会确定一个新的内容类型。以"&lt;html&gt;" 开头的文本,你就有了HTML。

    一个新文档被创建,在你的例子中是 HTMLDocument。


    @mKorbel:以下每次都会为 JTextPane 创建 HTML。

        buildSomething.append("<html>");
        buildSomething1.append("<html>");
        for (int i = 0; i < 10; i++) {
            buildSomething.append("<span style=\"color:red\">" + myBirthday + "</span>");
            buildSomething1.append("<b style=\"color:blue\">" + myBirthday + "</b>");
        }
    

    【讨论】:

    • 所以buildSomething.append("&lt;html&gt;&lt;b style=\"color:pink\"&gt;"+Birthday+"&lt;/span&gt;&lt;/html&gt;");?我试过了,还是一样。
    • 你做了buildSomething = new StringBuilder(); buildSomething.append("&lt;html&gt;" + ...); textPane.setText(buildSomething.toString());吗?
    • 我必须将 JTextPane 中的属性 contentType 设置为 text/html 才能使其工作。
    【解决方案2】:

    @乔普·埃根

    第一。循环生成

    buildSomething.append("<span style=\"color:pink\">" + myBirthday + "</span>");
    

    第二。循环生成相同的输出,我认为是否包裹在 &lt;html&gt; ..&lt;html&gt; 中并不重要,因为有 pane.setContentType("text/html");

    和(我在这里发布的代码不正确&lt;html&gt; ..&lt;/html&gt;

    buildSomething1.append("<html><span style=\"color:pink\">" 
        + myBirthday + "</span></html>");
    

    import java.awt.*;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.*;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.html.HTMLDocument;
    
    public class MyTextPane implements Runnable {
    
        private JFrame frm;
        private JScrollPane jsp;
        private JTextPane jta;
        private StringBuilder buildSomething = new StringBuilder();
        private StringBuilder buildSomething1 = new StringBuilder();
        final String myBirthday = "Birthday";
    
        public MyTextPane() {
            for (int i = 0; i < 10; i++) {
                buildSomething.append("<span style=\"color:red\">" + myBirthday + "</span>");
                buildSomething1.append("<span style=\"color:blue\">" + myBirthday + "</span>");
            }
            jta = new JTextPane();
            jta.setContentType("text/html");
            jta.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            jta.setText(myBirthday);
            jsp = new JScrollPane(jta);
            jsp.setPreferredSize(new Dimension(250, 450));
            frm = new JFrame("awesome");
            frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frm.setLayout(new BorderLayout());
            frm.add(jsp, BorderLayout.CENTER);
            frm.setLocation(100, 100);
            frm.pack();
            frm.setVisible(true);
            new Thread(this).start();
        }
    
        @Override
        public void run() {
            try {
                Thread.sleep(1500);
            } catch (Exception e) {
                e.printStackTrace();
            }
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    jta.setText(null);
                    HTMLDocument doc = (HTMLDocument) jta.getStyledDocument();
                    try {
                        doc.insertAfterEnd(doc.getCharacterElement(doc.getLength()), buildSomething.toString());
                    } catch (BadLocationException ex) {
                        Logger.getLogger(MyTextPane.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IOException ex) {
                        Logger.getLogger(MyTextPane.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
            try {
                Thread.sleep(1500);
            } catch (Exception e) {
                e.printStackTrace();
            }
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    HTMLDocument doc = (HTMLDocument) jta.getStyledDocument();
                    try {
                        doc.insertAfterEnd(doc.getCharacterElement(doc.getLength()), buildSomething1.toString());
                    } catch (BadLocationException ex) {
                        Logger.getLogger(MyTextPane.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IOException ex) {
                        Logger.getLogger(MyTextPane.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    MyTextPane fs = new MyTextPane();
                }
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多