Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入符号位置在JTEXT区域关闭_Java_Swing_Jtextcomponent - Fatal编程技术网

Java 插入符号位置在JTEXT区域关闭

Java 插入符号位置在JTEXT区域关闭,java,swing,jtextcomponent,Java,Swing,Jtextcomponent,我正在向具有布局管理器的组件添加一个JTextArea,该布局管理器考虑首选的大小和位置。但是,在键入几个“宽”字母(例如“m”)后,JTextArea中显示的插入符号的位置会出错: 这是在从左边键入所有字母之后,实际插入符号位置在“d”之后。本例中的JTextArea比文本宽得多。不确定它是否相关,但使用的字体是Arial,大小11,普通样式,并且在将JTextArea添加到父容器之前进行设置。你知道这是什么原因吗 我以前在使用JBuilder时遇到过同样的问题,插入符号的位置不是它们应该的

我正在向具有布局管理器的组件添加一个JTextArea,该布局管理器考虑首选的大小和位置。但是,在键入几个“宽”字母(例如“m”)后,JTextArea中显示的插入符号的位置会出错:


这是在从左边键入所有字母之后,实际插入符号位置在“d”之后。本例中的JTextArea比文本宽得多。不确定它是否相关,但使用的字体是Arial,大小11,普通样式,并且在将JTextArea添加到父容器之前进行设置。你知道这是什么原因吗

我以前在使用JBuilder时遇到过同样的问题,插入符号的位置不是它们应该的位置

这只发生在Windows中文版,如果系统是英文版,就可以了

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

这不是jbuilder问题,它也发生在其他java应用程序上,实际上这是一个JRE问题,转到JRE/lib目录,修改font.properties或fontconfig.peroperties.src(取决于不同的JRE版本),在那里添加字体将解决此问题


我想这不是你问题的答案,但可能是某个人的问题,仅供你参考。

看看这个。它起作用了

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

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

您还可以尝试使用以下命令将插入符号强制放置在文本末尾:

JTextArea displayArea;    
displayArea.setCaretPosition(displayArea.getDocument().getLength());
试试这个:

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

为了更快地得到更好的帮助,发布一条消息。我发现了问题。这是由于在绘制父组件时将KEY_Fractilmetrics rendering hint设置为ON而导致的。用于报告问题源的+1。也许你应该把它作为一个答案输入,并把它标记为正确(当网站允许你的时候——从内存来看,它不是即时的)。很高兴你把它整理好了。:)@DanielMaly继续,为您的问题添加一个正式答案,并将其标记为已接受。回答你自己的问题没关系。只是一个友好的提醒@DanielMaly。安德鲁和迈克都是对的。StackOverFlow鼓励您按照标准程序回答自己的问题。请你自己发布一个问题的答案,然后接受这个答案,这样我们就可以结束这个问题了?此外,如果前面的问题解决了您的问题,您需要接受这些问题的答案。