将 JTextPane 设置为内容类型 HTML 并使用字符串生成器

发布于 2025-01-01 00:45:37 字数 276 浏览 0 评论 0原文

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

这是我的附录的一个例子:

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

我做错了什么吗?我该如何修复它?

I'm using string builders to append text to my JTextPane, I've set content type as pane.setContentType("text/html"); but the no text actually appears on my JTextPane.

This is an example of my append:

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

Is there something I'm doing severely wrong? And how do I go about fixit it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

阳光下慵懒的猫 2025-01-08 00:45:37

每次调用 JTextPane.setText(...) 时,都会确定新的内容类型。以 "" 开始文本,您就得到了 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>");
    }

Every time JTextPane.setText(...) is called a new content type is determined. Start the text with "<html>" and you've got HTML.

A new document is created, in your case HTMLDocument.


@mKorbel: the following creates every time HTML for the JTextPane.

    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>");
    }
池木 2025-01-08 00:45:37

@乔普·埃根

第一。循环生成

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

在此处输入图像描述

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

和(我在这里发布的代码不正确 。 .)

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

@Joop Eggen

1st. loop generate

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

enter image description here

2nd. loop generate same output, I think that doesn't matter if is wrapped inside <html> ..<html> or not because there is pane.setContentType("text/html");

and (not correct code that I posted here <html> ..</html>)

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

enter image description here

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();
            }
        });
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文