【问题标题】:Highlighting line of JTextAreaJTextArea 的高亮行
【发布时间】:2012-02-14 14:50:03
【问题描述】:

我试图突出显示 JTextArea 子类的多行(未选中)。尽管我想突出显示整行,而不仅仅是每行包含的文本。我得到了这个工作,但它只突出显示文本:

DefaultHighlighter h = (DefaultHighlighter)textArea.getHighlighter(
    try {
            int start = textArea.getLineStartOffset(blockedLine);
            int end = textArea.getLineEndOffset(blockedLine);
            DefaultHighlightPainter redHighlight = new DefaultHighlighter.DefaultHighlightPainter(Color.RED);
            h.addHighlight(start, end, redHighlight);
        } catch (BadLocationException ex) {
            Logger.getLogger(JavaFilter.class.getName()).log(Level.SEVERE, null, ex);
        }

如何突出显示整行而不仅仅是文本?我正在为文本区域使用开源库,因此无法选择 JTextPane 或其他组件(使用 rysntaxtextarea 库)。

【问题讨论】:

  • 您的代码适用于我在 XP 上使用 JDK6_7。关键是end 值。当我使用end 时,整行都会突出显示。当我使用end - 1 时,仅突出显示文本。因此,您需要确保换行符包含在突出显示中。也许尝试使用end + 1?如果您仍有问题,请发布您的 SSCCE,这可能是版本/平台问题。
  • @camickr s/he 使用 Fifesoft 的 JTextArea 的衍生物,
  • 更改结束偏移只会使突出显示在下面一行我猜。我会检查它。
  • 在 Vista 上的 JDK6_31 上使用默认 Swing JTextArea 尝试了 end 想法,但它从不突出显示整行:当我突出显示到 \n 字符时,当突出显示包含 @987654328 @ 字符和下一行的某个字符,当 \n 恰好是该范围中包含的最后一个字符时,当突出显示范围仅为 \n 字符时(在这种情况下没有观察到视觉差异)。在所有这些情况下,该行最后一个字符右侧的区域保持白色。

标签: java swing


【解决方案1】:

我建议使用JTextPane / JEditorPane,这些JTextComponents 可以装饰并支持样式文本,您可以在JTextPane / JEditorPane 中添加任何JComponent,例如Icon... ),例如 HighlightPainter

【讨论】:

【解决方案2】:

@camickr 的LinePainter.java 的想法在这里适用:实现Highlighter.HighlightPainter,使其paint(..) 方法超出给定的bounds,绘制一个相同高度和全宽的矩形。

【讨论】:

    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多