Java 绝地武士是最后一行

Java 绝地武士是最后一行,java,swing,jeditorpane,end-of-line,Java,Swing,Jeditorpane,End Of Line,使用JEditorPane,有没有办法判断插入符号当前是否在最后一行?我在API中找不到任何东西,更重要的是,在JEditorPane派生的JTextComponent中找不到任何东西。当用户使用向下箭头键向下移动文本时,我需要找出这一点。我目前的想法是: private boolean isEndOfText() { int tmpCurrent = editor.getCaretPosition(); editor.getActionMap().get(DefaultEditorK

使用JEditorPane,有没有办法判断插入符号当前是否在最后一行?我在API中找不到任何东西,更重要的是,在JEditorPane派生的JTextComponent中找不到任何东西。当用户使用向下箭头键向下移动文本时,我需要找出这一点。我目前的想法是:

private boolean isEndOfText() {
  int tmpCurrent = editor.getCaretPosition();

  editor.getActionMap().get(DefaultEditorKit.endLineAction).actionPerformed(null);
  int tmpEnd = editor.getCaretPosition();
  try { editor.setCaretPosition(tmpEnd + 1); } catch (Exception e) { editor.setCaretPosition(tmpCurrent); return true; }
  editor.setCaretPosition(tmpCurrent);
  return false;
}

只要按下向下键,该代码就会运行,并通过检测插入符号放在最后一个可能的位置(即行的末尾)之后是否发生错误来返回是否为文本的结尾(如果它实际上是最后一行)否则,这意味着尚未到达文本结尾。

可能有更好的方法,但您可以尝试以下方法:

return editor.getText().indexOf("\n", editor.getCaretPosition()) == -1;

您应该能够使用。一个方法返回总行数,另一个方法返回插入符号处的行数


因为我不喜欢JEditorPane的HTML支持,所以我从来没有玩过这么多JEditorPane。您还可以使用editor.getDocument().getLength()确定插入符号是否位于文档的末尾。这将适用于只显示文本而不显示HTML的JTextArea或JTextPane。不确定它在JEditorPane中是如何工作的。

我唯一关心的是用户是否有一个相当大的文件。这个窗格仍然只使用纯文本,但带有语法突出显示,因此我不认为HTML会给我带来任何问题。我关于HTML的观点是,文档中充满了HTML标记。因此,如果您使用editor.getText()而不是editor.getDocument().getText(),我相信您会得到两个不同的字符串,一个只包含文本,另一个也包含所有标记。因此,您需要注意如何比较偏移。我更喜欢使用带有属性的JTextPane来设置文本样式,然后文本字符串是相同的,因为属性不是文档的一部分。不管怎样,我的建议有助于解决问题吗?充其量也不确定。虽然我很喜欢看到其他人如何处理同样的问题,但我已经有了一个当前的测线系统,通过检查箭头键以及delete、enter和backspace的使用情况。我也有一个系统来保持行的数量,可以说比给定的方法更有效。我认为我在这里的答案实际上来自于我自己做了更多的编码,这将反过来增加更多的功能,我可以稍后使用这些功能来提高现有功能的效率。这有一个术语吗?不管怎样,谢谢你的回答。我印象深刻的是,你的代码得到的行数比我提供的2行代码更有效。也许你可以分享你的解决方案?