【问题标题】:Get JTextArea current row text on Enter Key在 Enter 键上获取 JTextArea 当前行文本
【发布时间】:2013-05-31 01:37:21
【问题描述】:

嗯,这也许是个小问题,但我想不通。
当我按下 Enter 键时,我希望我的程序在当前光标位置显示文本。
这是我当前的代码:

if (evt.getKeyCode() == 10) {
  try {
    int offset=ta.getLineOfOffset(ta.getCaretPosition());
    int start=ta.getLineStartOffset(offset);
    int end=ta.getLineEndOffset(offset);

    System.out.println("ext: "+ta.getText(start, end));

  } catch (BadLocationException ex) {
    System.out.println(ex.getMessage());
  }
}  

它只在我第一次按 Enter 键时起作用,下次按它时,它会抛出异常“Invalid Location”。
有更好的方法吗?

【问题讨论】:

  • 按回车键作为提交操作,插入符号消失 - 这就是您收到 Invalid Operation 的原因。当您第二次按 Enter 时,TextArea 中没有插入符号。
  • 嗯,那你建议我怎么解决这个问题?
  • 您可以保存最后一个已知的插入符号位置并将其返回。或者在 Enter 之后(触发可以在 ActionListener 中处理的 Action),您以编程方式将插入符号设置为其原始位置。
  • 你能提供一个例子@JakubZaverka 吗?我对这个感到困惑..

标签: java swing document jtextarea caret


【解决方案1】:

呵呵,自己解决了:

这是我正在寻找的正确代码:

if (evt.getKeyCode() == 10) {
  try {
    int offset=ta.getLineOfOffset(ta.getCaretPosition());
    int start=ta.getLineStartOffset(offset);
    int end=ta.getLineEndOffset(offset);

    System.out.println("Text: "+ta.getText(start, (end-start)));                
  } catch (BadLocationException ex) {
    System.out.println(ex.getMessage());
  }
}

也许它对那里的另一个人有用:)

【讨论】:

    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2014-09-16
    • 1970-01-01
    相关资源
    最近更新 更多