Подтвердить что ты не робот

Позиция Caret отключена в JTextArea

Я добавляю JTextArea к компоненту с менеджером макетов, который учитывает предпочтительный размер и местоположение. Однако позиция отображаемого каретки в JTextArea становится ошибочной после ввода нескольких "широких" букв (например, "m" ):

enter image description here

Это после того, как набрали все буквы слева, а фактическая позиция каретки - после 'd'. JTextArea в этом случае намного шире, чем текст. Не уверен, что это может быть актуально, но используемый шрифт Arial, размер 11, простой стиль и устанавливается перед добавлением JTextArea в родительский контейнер. Любые идеи, что может быть причиной этого?

4b9b3361

Ответ 1

Проверьте это. Оно работает.

Я использовал это в одном из моих приложений.

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

Ответ 2

Попробуйте следующее:

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

Ответ 3

Я действительно сталкиваюсь с той же проблемой при использовании JBuilder раньше, позиция каретки не в том положении, в котором они должны быть.

Это произошло только для китайской версии Windows, если система является английской версией, это нормально..

Чтобы решить эту проблему, просто перейдите к настройке jbuilder, измените все шрифты на китайский шрифт.

Это не проблема jbuilder, это случается и с другим приложением java, на самом деле это проблема JRE, идет в каталог JRE/lib, модифицирует font.properties или fontconfig.peroperties.src(зависит от другой версии jre), добавляет шрифт будет решить эту проблему.

Я думаю, это не ответ на ваш вопрос, но, возможно, это кто-то, просто для вашей справки.

Ответ 4

вы также можете попытаться принудительно разместить каретку в конце текста, используя что-то вроде folloiwng:

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