我有一个对象(模型)列表,它们不断附加到(类似于日志文件),我想在JEditorPane(视图)中显示为富文本。我怎么把它们粘在一起?
http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#document似乎没有提供足够的信息来使用。
答案 0 :(得分:2)
一个简单的解决方案是将模型中的每个对象转换为HTML并附加字符串以创建可在JEditorPane上设置的HTML文档。
答案 1 :(得分:2)
您可以将DefaultStyledDocument
与AttributeSet
一起使用:
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));
提供不一致的结果,文本窗格有时不会一直滚动。