【问题标题】:Caret position is off in JTextAreaJTextArea 中的插入符号位置已关闭
【发布时间】:2012-03-05 23:58:23
【问题描述】:

我将 JTextArea 添加到具有尊重首选大小和位置的布局管理器的组件中。但是,在输入几个“宽”字母(例如“m”)后,JTextArea 中显示的插入符号的位置会出现错误:

这是在从左侧键入所有字母之后,实际插入符号位置在“d”之后。在这种情况下,JTextArea 比文本宽得多。不确定它是否相关,但使用的字体是 Arial,大小 11,普通样式,并且是在将 JTextArea 添加到父容器之前设置的。有什么想法可能导致这种情况吗?

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 我发现了问题。这是由于在绘制父组件时将 KEY_FRACTIONALMETRICS 渲染提示设置为 ON。
  • +1 用于报告问题的根源。也许您应该输入它作为答案并将其标记为正确(当站点允许您时 - 从记忆中它不是立即的)。很高兴你把事情解决了。 :)
  • @DanielMaly 继续为您的问题添加正式答案并将其标记为已接受。可以回答您自己的问题。
  • 只是一个友好的提醒@DanielMaly。安德鲁和迈克都是对的。 StackOverFlow 鼓励您自己回答作为标准程序。您能否自行发布该问题的答案,然后接受该答案以便我们结束该问题?此外,如果他们解决了您的问题,您需要接受之前问题的答案。 blog.stackoverflow.com/2011/07/…

标签: java swing jtextcomponent


【解决方案1】:

试试这个:

JTextArea textArea;
DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

【讨论】:

    【解决方案2】:

    看看这个。有用。

    我已经在我的一个应用程序中使用了它。

     Rectangle r = textArea.modelToView( textArea.getCaretPosition() );
     int  caretX = r.x;
     int  caretY = r.y;
    

    【讨论】:

      【解决方案3】:

      我之前在使用 JBuilder 时实际上遇到了同样的问题,插入符号的位置不在它们应该在的位置。

      只有windows中文版会出现这种情况,如果系统是英文版就好了..

      要解决这个问题,只需进入 jbuilder 设置,将所有字体更改为中文字体。

      不是jbuilder问题,其他java应用也有,其实是JRE问题,进入JRE/lib目录,修改font.properties或者fontconfig.peroperties.src(根据jre版本不同),添加那里的字体会解决这个问题。

      我猜这不是你问题的答案,但可能发生在某人身上,仅供参考。

      【讨论】:

        【解决方案4】:

        您也可以尝试使用以下方式在文本末尾强制放置插入符号:

        JTextArea displayArea;    
        displayArea.setCaretPosition(displayArea.getDocument().getLength());
        

        【讨论】:

          猜你喜欢
          • 2011-08-22
          • 2013-05-21
          • 1970-01-01
          • 2013-07-18
          • 2011-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多