Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing自定义文本窗格_Java_Swing_Text_Jeditorpane - Fatal编程技术网

Java Swing自定义文本窗格

Java Swing自定义文本窗格,java,swing,text,jeditorpane,Java,Swing,Text,Jeditorpane,我有一个对象(模型)列表,这些对象(模型)经常被附加到(类似于日志文件)中,我希望在一个视图窗格(视图)中显示为富文本。我怎样才能把它们粘在一起 似乎没有提供足够的信息来使用。一个简单的解决方案是将模型中的每个对象转换为HTML,并附加字符串以创建一个可以在JEditorPane上设置的HTML文档。构建自定义的抽象文档。您最好使用一个中间模型,它可以监听对象和文档中的更改(使用a),并根据需要更新模型或视图。如果您在用户时间内工作(而不是每秒更新对象模型1000次),此功能非常有效。您可以将D

我有一个对象(模型)列表,这些对象(模型)经常被附加到(类似于日志文件)中,我希望在一个视图窗格(视图)中显示为富文本。我怎样才能把它们粘在一起


似乎没有提供足够的信息来使用。

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

构建自定义的
抽象文档
。您最好使用一个中间模型,它可以监听
对象和文档中的更改(使用a),并根据需要更新模型或视图。如果您在用户时间内工作(而不是每秒更新
对象
模型1000次),此功能非常有效。

您可以将
DefaultStyledDocument
AttributeSet
一起使用:

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

好的,最简单的方法是扩展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());
}


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

什么类用作对象(模型)?我有一个专有对象向量-每个对象包含一个字符串和其他信息。理想情况下,某种自定义渲染器可以设置样式并附加到文本窗格中,但我不知道如何将其连接在一起。我的理解是,编辑器窗格的模型必须是文档。如果不实现文档,如何添加自定义模型?我的意思是使用标准样式文档之一,只处理文本和属性。是的,这将是最简单的解决方案,但我希望在用户希望更改其颜色方案或过滤数据时重新提交数据。我想所有的数据都可以在任何事件之后重新追加。如果是这样的话,我想你最好使用JTable。为对象创建TableModel比创建文档更容易。然后,您可以将过滤器应用于表格模型,并更改表格renederer的颜色设置等。
scrollRectToVisible(new Rectangle(0, getHeight() - 2, 1, 1));