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?
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>");
}
@Joop Eggen
1st. loop generate
buildSomething.append("<span style=\"color:pink\">" + myBirthday + "</span>");
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>");
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();
}
});
}
}
来源:https://stackoverflow.com/questions/9071389/setting-jtextpane-to-content-type-html-and-using-string-builders