【问题标题】:How to disable the ability to click on the JTextArea如何禁用单击 JTextArea 的功能
【发布时间】:2020-10-08 10:58:21
【问题描述】:

我需要禁用在 JTextArea 中单击鼠标的功能。

以下是我目前的 JTextArea:

textArea1 = new JTextArea();
textArea1.setBorder(BorderFactory.createLineBorder(Color.black, 1));
DefaultCaret caret = (DefaultCaret) textArea1.getCaret(); // this line and the line below was inspired by a comment found here: https://stackoverflow.com/questions/15623287/how-to-always-scroll-to-bottom-of-text-area
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
textArea1.setEditable(false);
JScrollPane scrollPane1 = new JScrollPane(textArea1)

一旦您用鼠标按下 JTextArea,它几乎会使整个 DefaultCaret 方法停止工作。我以前认为这是因为您可以突出显示,但事实并非如此。

DefaultCaret 方法使 JTextArea 在新文本添加到 textarea 时始终位于底部。

【问题讨论】:

    标签: java swing user-interface jtextarea


    【解决方案1】:
    textArea1.setEnabled(false); // text area can neither be entered nor text selected
    

    插入符号显示在它默认的位置,是第一个可聚焦的组件。

    【讨论】:

    • 感谢您的评论!当我将其设置为禁用时,它仍然允许用户在 textArea 内单击。
    • “感谢您的评论!”不客气,但这是一个答案。这(以及我刚刚复制/粘贴的你的)是一条评论。 “当我将它设置为禁用时,它仍然允许用户在 textArea 内单击。” 我很惊讶!它在这里没有这种行为。请编辑问题以显示minimal reproducible example,它确实为您显示了该行为。
    【解决方案2】:

    我建议两件事:

    • 添加 setFocusable(false)
    • 如果这不起作用:在您的文本区域上使用方法 removeMouseListener 和 getMouseListeners

    【讨论】:

    • 谢谢你,现在就试试这个。
    • 所以第一个选项不起作用,因为它似乎与始终将视点保持在底部的插入符号方法混淆了。第二个应该可以,但它没有,如果你能帮我弄清楚原因,那就太棒了。我使用下面的代码来删除监听器: textArea1.removeMouseListener(textArea1.getMouseListeners()[0]); textArea1.removeMouseListener(textArea1.getMouseListeners()[1]);但仍然是同样的问题。如果我单击 textArea1 它只是忽略了整个插入符号方法。
    猜你喜欢
    • 2020-10-08
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    相关资源
    最近更新 更多