Java Swing自定义文本JEditorPane

时间:2009-03-13 00:03:26

标签: java swing text jeditorpane

我有一个对象(模型)列表,它们不断附加到(类似于日志文件),我想在JEditorPane(视图)中显示为富文本。我怎么把它们粘在一起?

http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#document似乎没有提供足够的信息来使用。

4 个答案:

答案 0 :(得分:2)

一个简单的解决方案是将模型中的每个对象转换为HTML并附加字符串以创建可在JEditorPane上设置的HTML文档。

答案 1 :(得分:2)

您可以将DefaultStyledDocumentAttributeSet一起使用:

SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBold(attr , true);
StyleConstants.setForeground(attr, Color.RED); 
document.insertString(document.getLenght(),"yourstring", attr))

答案 2 :(得分:0)

构建自定义Abstract Document很痛苦。最好使用中间模型来监听Object模型和文档(带DocumentListener)中的更改,并更新模型或视图,具体取决于。如果您在用户时间工作(而不是每秒更新Object模型1000次),这种方法非常有效。

答案 3 :(得分:0)

好的,所以最简单的方法是扩展JTextPane。扩展类创建并管理基础列表。在格式更改(例如,新颜色)上,列表完全重新格式化数据。唯一真正的问题是自动滚动不是100%可靠,两者:

Container parent = getParent();

// get the parent until scroll pane is found
while (parent != null && !(parent instanceof JScrollPane)) {
    parent = parent.getParent();
}

if (parent != null) {
    JScrollPane scrollPane = (JScrollPane)parent;
    scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum());
}

scrollRectToVisible(new Rectangle(0, getHeight() - 2, 1, 1));

提供不一致的结果,文本窗格有时不会一直滚动。