4

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

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

4

4 回答 4

2

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

于 2009-03-13T09:39:18.307 回答
2

您可以DefaultStyledDocument与 一起使用AttributeSet

SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBold(attr , true);
StyleConstants.setForeground(attr, Color.RED); 
document.insertString(document.getLenght(),"yourstring", attr))
于 2009-03-13T14:59:17.930 回答
0

建立一个习惯Abstract Document是痛苦的。你最好使用一个中间模型来监听Object模型和文档中的变化(使用 a DocumentListener)并根据情况更新模型或视图。如果您在用户时间内工作(而不是Object每秒更新模型 1,000 次),这将非常有效。

于 2009-03-13T11:27:51.777 回答
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));

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

于 2009-03-19T14:01:47.367 回答