我已经知道JTextArea或JTextField不支持HTML。
我想将文本添加到像JTextArea这样的“屏幕”,然后继续向其添加文本。
我尝试使用JTextArea,效果非常好,但它似乎不支持格式化......
所以我尝试使用JEditorPane的子类JTextPane,但是这个没有它的附加函数......
有人能指导我如何轻松地将文字附加到JTextPane或格式化JTextArea。
或者如果有更好的其他组件,请告诉我:)
更新方法由主题调用,该主题为多个对象执行此操作。这只是给出了一堆格式化的字符串,然后放在一个漂亮的框架中以显示用户。
@Override
public void update(String channel, String sender, String message) {
if(channel.equals(this.subject) || sender.equals(subject)){
StringBuffer b = new StringBuffer();
b.append("<html>");
b.append("<b>");
b.append("</b>");
b.append("[");
b.append(sender);
b.append("] : ");
b.append("</b>");
b.append(message);
b.append("</html>");
b.append("\n");
chatArea.append(b.toString());
}
答案 0 :(得分:4)
有人能指导我如何轻松地将文字附加到JTextPane
Document doc = textPane.getDocument();
doc.insertString(doc.getLength(), "some text", green);
使用属性而不是HTML,它更容易。例如,您可以将“绿色”属性定义为:
SimpleAttributeSet green = new SimpleAttributeSet();
StyleConstants.setForeground(green, Color.GREEN);
答案 1 :(得分:1)
您可以使用 JEditorPane 。但是当你想要附加一些包含HTML标记的字符串时,你应该执行一些方法而不仅仅是insertString()
方法。
例如,你有
//setup EditorPane
JEditorPane yourEditorPane = new JEditorPane();
yourEditorPane.setContentType("text/html");
//setup HTMLEditorKit
HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
yourEditorPane.setEditorKit(htmlEditorKit);
如果您只使用insertString()
String htmlText = "<div class='test'><b>Testing</b></div>";
Document doc = yourEditorPane.getDocument();
doc.insertString(doc.getLength(), htmlText, null);
输出
&LT; div class ='test'&gt;&lt; b&gt;测试&lt; / b&gt;&lt; / div&gt;
你应该这样做
htmlEditorKit.insertHTML((HTMLDocument) doc, doc.getLength(), htmlText, 0, 0, null);
所以编辑窗格的输出将是
测试的
最后,如果您想为您的编辑窗格设置样式,您可以使用此方法
StyleSheet css = htmlEditorKit.getStyleSheet();
css.addRule(".test {color: green;}");
答案 2 :(得分:0)
对于格式化输出,JEditorPAne可能是最佳选择。
您可以使用JEditorPane的getText()方法获取当前在窗格中的文本,然后附加新文本并调用setText()将所有内容放回去。
e.g。
b.append(chatArea.getText());
b.append("All the other text")
chatArea.setTExt(b.toString());