当前位置: 首页 > 知识库问答 >
问题:

jtextarea-在向上或向下滚动时突出显示文本

晋功
2023-03-14

我试图使用添加到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

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

共有1个答案

武琛
2023-03-14

你的要求不是那么容易做到的。首先,使用JTextPane而不是JTextTarea,它会更容易处理。您将需要从它获得荧光笔对象

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

您可能可以将其放在onkeyRelease()方法中。你有点明白你要做什么了。在Java API文档中阅读有关使用JTextPane和Highlighter类的内容,它将真正帮助您。

 类似资料:
  • 问题内容: 我是iOS开发的新手。现在,当我向下滚动并且向上滚动时,我想隐藏我的标签栏。我希望以与导航栏相同的方式对此进行动画处理。对于导航栏,我只需单击“属性”检查器中的选项。我看到了工具栏的一些示例,但是我不能采用它作为标签栏。 只是隐藏了我的标签栏,但它没有像导航控制器那样具有动画效果。 问题答案: 这是我在生产应用程序中实际使用的代码。 它在 Swift中 ,还更新了var。 您还可以使用

  • 问题内容: 我创建了一个带有JTextArea的JFrame。我想在每次追加后自动向下滚动文本区域。我应该如何处理? 我已经尝试过,但是什么都没有改变。 问题答案: 有两种方法(但必须将JTextArea放在JScrollPane中) a)设置插入符号(方法正确) 例如 b)从(从)移至最大值

  • 我在Selenium 1(又名Selenium RC)中编写了以下代码,用于使用java滚动页面: Selenium 2(WebDriver)中的等效代码是什么?

  • 问题内容: 我很好奇是否有人知道一旦/当用户完成在网页上的文本选择后,我将如何触发一个函数运行?我希望用户能够选择文本,并且在短暂的延迟后(或立即,此时无所谓),文本附近会出现一个叠加按钮,用户可以单击该按钮,然后我返回并运行我的更多基于选择的代码。这是用于Firefox扩展。 我能想到的一个类似示例就像在IE中一样,您可以在其中选择文本,然后显示“ Web加速器”。我99%确信我知道如何实际覆盖

  • 问题内容: 我已经在Selenium 1(又名Selenium RC)中编写了以下代码,以便使用Java进行页面滚动: Selenium 2(WebDriver)中的等效代码是什么? 问题答案: 对于向下滚动: 或者,您可以执行以下操作: 对于向上滚动:

  • 本文向大家介绍vim 向下滚动,包括了vim 向下滚动的使用技巧和注意事项,需要的朋友参考一下 示例 命令 描述 Ctrl+E 向下滚动一行。 Ctrl+D 向下滚动半屏(可使用该scroll选项配置)。 Ctrl+F 向下滚动全屏。 z+ 在窗口顶部的窗口下方绘制第一行。