Java Swing自定义文本JEditorPane

4

哪个类被用作对象(模型)? - ksuralta
我有一个专有对象的向量 - 每个对象包含一个字符串和其他信息。理想情况下,某种自定义渲染器将样式化并附加到文本窗格中,但我无法弄清楚如何将其结合起来。 - Pool
4个回答

2
您可以使用 DefaultStyledDocumentAttributeSet 一起使用:
SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBold(attr , true);
StyleConstants.setForeground(attr, Color.RED); 
document.insertString(document.getLenght(),"yourstring", attr))

2

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


是的,这将是最简单的解决方案,但我希望在用户希望更改其颜色方案或筛选数据时重新呈现数据。我想整个数据可以在任何事件后重新附加。 - Pool
如果是这种情况,我认为您最好使用JTable。制作对象的TableModel比尝试制作Document更容易。然后,您可以将过滤器应用于表格模型,并更改表格渲染器设置以进行颜色等方面的调整。 - Mark

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));

有时文本窗格无法完全滚动,导致提供不一致的结果。


0
构建自定义的Abstract Document是很痛苦的。最好使用一个中介模型,它监听您的Object模型和文档(使用DocumentListener),并根据需要更新模型或视图。如果您在用户时间内工作(而不是每秒更新Object模型1000次),这种方法非常有效。

我理解的方式是 - 编辑窗格的模型必须是文档。如果您不实现文档,那么您的自定义模型如何被添加呢? - Pool
我本意是使用标准的StyleDocuments,只是操作文本和属性。 - Mike Katz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接