我有一个不断附加到的对象(模型)列表(类似于日志文件),我想在 JEditorPane(视图)中显示为富文本。我怎样才能把它们粘在一起?
http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#document似乎没有提供足够的信息来使用。
我有一个不断附加到的对象(模型)列表(类似于日志文件),我想在 JEditorPane(视图)中显示为富文本。我怎样才能把它们粘在一起?
http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#document似乎没有提供足够的信息来使用。
一种简单的解决方案是将模型中的每个对象转换为 HTML 并附加字符串以创建可以在 JEditorPane 上设置的 HTML 文档。
您可以DefaultStyledDocument
与 一起使用AttributeSet
:
SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBold(attr , true);
StyleConstants.setForeground(attr, Color.RED);
document.insertString(document.getLenght(),"yourstring", attr))
建立一个习惯Abstract Document
是痛苦的。你最好使用一个中间模型来监听Object
模型和文档中的变化(使用 a DocumentListener
)并根据情况更新模型或视图。如果您在用户时间内工作(而不是Object
每秒更新模型 1,000 次),这将非常有效。
好的,所以最简单的方法是扩展 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));
提供不一致的结果,文本窗格有时不会一直滚动。