将 JTextPane 设置为内容类型 HTML 并使用字符串构建器
Posted
技术标签:
【中文标题】将 JTextPane 设置为内容类型 HTML 并使用字符串构建器【英文标题】:setting JTextPane to content type HTML and using string builders 【发布时间】:2012-02-22 16:34:52 【问题描述】:我正在使用字符串构建器将文本附加到我的 JTextPane,我已将内容类型设置为 pane.setContentType("text/html");
,但我的 JTextPane 上实际上没有出现任何文本。
这是我的追加示例:
buildSomething.append("<b style=\"color:pink\">"+Birthday+"</span>");
我做错了什么吗?我该如何解决它?
【问题讨论】:
【参考方案1】:每次调用JTextPane.setText(...)
都会确定一个新的内容类型。以"<html>"
开头的文本,你就有了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("<html><b style=\"color:pink\">"+Birthday+"</span></html>");
?我试过了,还是一样。
你做了buildSomething = new StringBuilder(); buildSomething.append("<html>" + ...); textPane.setText(buildSomething.toString());
吗?
我必须将 JTextPane 中的属性 contentType
设置为 text/html
才能使其工作。【参考方案2】:
@乔普·埃根
第一。循环生成
buildSomething.append("<span style=\"color:pink\">" + myBirthday + "</span>");
第二。循环生成相同的输出,我认为是否包裹在 <html> ..<html>
中并不重要,因为有 pane.setContentType("text/html");
和(我在这里发布的代码不正确<html> ..</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();
);
【讨论】:
以上是关于将 JTextPane 设置为内容类型 HTML 并使用字符串构建器的主要内容,如果未能解决你的问题,请参考以下文章