【问题标题】:Java Swing custom text JEditorPaneJava Swing 自定义文本 JEditorPane
【发布时间】:2009-03-13 00:03:25
【问题描述】:

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

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

【问题讨论】:

  • 什么类被用作对象(模型)?
  • 我有一个专有对象的向量——每个对象都包含一个字符串和其他信息。理想情况下,某种自定义渲染器会设置样式并附加到文本窗格,但我不知道如何将它挂在一起。

标签: java swing text jeditorpane


【解决方案1】:

您可以将DefaultStyledDocumentAttributeSet 一起使用:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

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

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

    【讨论】:

    • 我理解的方式 - 编辑器窗格的模型必须是文档。如果您不实施 Document 如何添加您的自定义模型?
    • 我的意思是使用标准的 StyleDocument 之一,只操作文本和属性。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多