【问题标题】:Keep caret in TextArea when non-editable不可编辑时在 TextArea 中保留插入符号
【发布时间】:2012-01-23 14:13:32
【问题描述】:

我正在使用 java,我正在尝试制作一个不可编辑的 JTextArea,但该字段中仍有插入符号。换句话说,文本区域不显示用户键入的字符,但仍具有闪烁的插入符号(即焦点)。

老实说,我很难理解这个问题。我尝试过使用setEditable,但没有办法保留插入符号。我也试过删除用户输入的字符,但我无法阻止它在屏幕上闪烁。

【问题讨论】:

  • 当心:您可能会混淆您的用户 - 闪烁的 caret(这是标记的技术术语 :-) 是可编辑的标准视觉线索

标签: java swing jtextarea


【解决方案1】:

我认为以下内容会对您有所帮助:

textArea.getCaret().setVisible(true);

textArea.getCaret().setSelectionVisible(true);

【讨论】:

  • 如果你也想恢复鼠标光标,试试textArea.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
【解决方案2】:

至于上面的答案

textArea.getCaret().setVisible(true);

并不总是完美地工作,如果 TextArea 或 EditorPane 失去焦点,假设您单击不同的框架或其他东西,当您返回时光标将再次不可见。

我也遇到过同样的问题,看来解决方案是添加一个焦点侦听器,并在每次编辑器获得焦点时将其设置为可见。

text.addFocusListener(new FocusAdapter() {
  @Override
  public void focusGained(FocusEvent e) {
    text.getCaret().setVisible(true); // show the caret anyway
  }
});

【讨论】:

  • 我不得不在我的插入符号监听器中添加text.getCaret().setVisible(true);,因为仅将它放在焦点监听器中并不总是有效(尽管它有所帮助)。这是 Java 8 (jdk 1.8.0_25) / Mac OS X MountainLion。
  • 使用FocusAdapter()代替FocusListener()时可以省略覆盖focusLost()方法,focusGained()方法应注解为@Override
猜你喜欢
  • 1970-01-01
  • 2011-12-05
  • 2014-06-28
  • 2018-06-16
  • 1970-01-01
  • 2011-10-07
  • 2015-04-13
  • 2014-03-10
  • 1970-01-01
相关资源
最近更新 更多