I am trying to show HTML formatted text on JTextPane.
The problem is, its not appending the text on JTextPane, its just over writing the already present text.
here is my test code:
/*
* NewJFrame.java
*/
package com.bi.test;
import java.awt.Color;
import java.awt.Rectangle;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
public class NewJFrame extends javax.swing.JFrame {
private static final String startHtmlTag = "<html>";
private static final String endHtmlTag = "</html>";
private static final String startHeadTag = "<head>";
private static final String endHeadTag = "</head>";
private static final String stardBodyTag = "<body>";
private static final String endBodyTag = "</body>";
// private static final String startPStyle = "<p style='margin-top: 0'>";
private static final String startPStyle = "<p style='valign='top'>";
private static final String endPStyle = "</p>";
private static final String stardH1Tag = "<H1>";
private static final String endH1Tag = "</H1>";
private static final String startBreakTag = "<br>";
private String englishFontName = "Arial";
private int englishFontStyle = 0;
private int englishFontSize = 10;
public NewJFrame() {
initComponents();
}
private void initComponents() {
jTextField1 = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
jTextPane1 = new javax.swing.JTextPane();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
getContentPane().add(jTextField1, new org.netbeans.lib.awtextra.AbsoluteConstraints(41, 12, 178, -1));
jTextPane1.setContentType("text/html");
jTextPane1.setText("<html><H1><head></head><p style='margin-top: 0'><H1>user says:</H1></p><br></body></html>");
jTextPane1.setEnabled(false);
jScrollPane1.setViewportView(jTextPane1);
getContentPane().add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(11, 52, 740, 210));
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-792)/2, (screenSize.height-334)/2, 792, 334);
}
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
String value = jTextField1.getText();
// appendText(value.trim());
append(Color.red, value);
jTextField1.setText("");
}
public void appendText(String s) {
String text = startHtmlTag + stardH1Tag + startHeadTag + endHeadTag + startPStyle + stardH1Tag + s + endH1Tag + endPStyle
+ startBreakTag + endBodyTag + endHtmlTag;
System.out.println(text);
try {
Document doc = jTextPane1.getDocument();
jTextPane1.setCaretPosition(doc.getLength());
jTextPane1.replaceSelection(text);
// Convert the new end location
// to view co-ordinates
Rectangle r = jTextPane1.modelToView(doc.getLength());
// Finally, scroll so that the new text is visible
if (r != null) {
jTextPane1.scrollRectToVisible(r);
}
} catch (BadLocationException e) {
System.out.println("Failed to append text: " + e);
}
}
public void append(Color c, String s1) { // better implementation--uses
String text = startHtmlTag + startHeadTag + endHeadTag + startPStyle + stardH1Tag + s1 + endH1Tag + endPStyle
+ startBreakTag + endBodyTag + endHtmlTag;
System.out.println(text);
StyleContext sc = StyleContext.getDefaultStyleContext();
AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY,
StyleConstants.Foreground, c);
int len = jTextPane1.getDocument().getLength(); // same value as
System.out.println("len = " + len);
System.out.println("caret = " + jTextPane1.getCaretPosition());
jTextPane1.setCaretPosition(len); // place caret at the end (with no selection)
jTextPane1.setCharacterAttributes(aset, false);
//jTextPane1.replaceSelection(text);
jTextPane1.setText(text );
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextPane jTextPane1;
}