【问题标题】:JTextArea - Highlight Text While Scrolling Up or DownJTextArea - 向上或向下滚动时突出显示文本
【发布时间】:2012-06-12 17:50:18
【问题描述】:

我正在尝试使用添加到 JScrollPane 的不可编辑的 JTextArea。我希望当用户单击该特定行时突出显示该行。我可以使用以下代码来实现这部分:

public static void initHighlightOption(final JTextArea textArea){

    textArea.setFont(new Font("Courier New", Font.PLAIN, 12));
    textArea.setEditable(false);

    final Action selectLine = getAction(textArea, DefaultEditorKit.selectLineAction);

    textArea.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 1) {
                selectLine.actionPerformed(null);
            }
     });

    textArea.setSelectionStart(0);
    textArea.setSelectionEnd(0);
}

public static Action getAction(JTextArea textArea, String name) {
    Action action = null;
    Action[] actions = textArea.getActions();

    for (int i = 0; i < actions.length; i++) {
        if (name.equals(actions[i].getValue(Action.NAME).toString())) {
            action = actions[i];
            break;
        }
    }

    return action;
}

我要补充的是,一旦突出显示一行并且用户使用键盘向上/向下键向上/向下滚动,我希望突出显示当前行。这可以通过添加 keyListener 来实现吗?我不知道在向上滚动时如何突出显示数据。

文本区域包含如下数据:

Line1
Line2

Line3

Line4
Line5

(即两个特定数据行之间可能有新行)

【问题讨论】:

    标签: java swing jscrollpane jtextarea


    【解决方案1】:

    您的要求并不容易做到。首先使用 JTextPane 而不是 JTextArea,它会更容易处理。您将需要从中获取 Highlighter 对象

    Highlighter hl = textPane.getHighlighter();
    

    并且您可能必须在每次用户使用箭头键滚动时跟踪插入符号的位置。这样做时,您需要以编程方式更改亮点;类似:

    Highlighter.Highlight myHighlight = null;
    Highlighter.Highlight[] highlights = textPane.getHighlighter().getHighlights();
    myHighlight = highlights[0]; //assuming there is one only
    
    try {
          hl.changeHighlight(myHighlight, myHighlight.getStartOffset()+1, myHighlight.getEndOffset());
    }
    catch(BadLocationException e) {
          e.printStackTrace();
    }
    

    你可以把它放在你的 onKeyReleased() 方法中。你有点明白你将要做什么。阅读 Java API 文档中关于使用 JTextPane 和 Highlighter 类的内容,这对你很有帮助。

    【讨论】:

    • 感谢@george_h,这是我努力实现目标的良好开端。
    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2016-01-17
    • 1970-01-01
    • 2023-01-17
    相关资源
    最近更新 更多