Ответ 1
Проверьте это. Оно работает.
Я использовал это в одном из моих приложений.
Rectangle r = textArea.modelToView( textArea.getCaretPosition() );
int caretX = r.x;
int caretY = r.y;
Я добавляю JTextArea к компоненту с менеджером макетов, который учитывает предпочтительный размер и местоположение. Однако позиция отображаемого каретки в JTextArea становится ошибочной после ввода нескольких "широких" букв (например, "m" ):
Это после того, как набрали все буквы слева, а фактическая позиция каретки - после 'd'. JTextArea в этом случае намного шире, чем текст. Не уверен, что это может быть актуально, но используемый шрифт Arial, размер 11, простой стиль и устанавливается перед добавлением JTextArea в родительский контейнер. Любые идеи, что может быть причиной этого?
Проверьте это. Оно работает.
Я использовал это в одном из моих приложений.
Rectangle r = textArea.modelToView( textArea.getCaretPosition() );
int caretX = r.x;
int caretY = r.y;
Попробуйте следующее:
JTextArea textArea;
DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Я действительно сталкиваюсь с той же проблемой при использовании JBuilder раньше, позиция каретки не в том положении, в котором они должны быть.
Это произошло только для китайской версии Windows, если система является английской версией, это нормально..
Чтобы решить эту проблему, просто перейдите к настройке jbuilder, измените все шрифты на китайский шрифт.
Это не проблема jbuilder, это случается и с другим приложением java, на самом деле это проблема JRE, идет в каталог JRE/lib, модифицирует font.properties или fontconfig.peroperties.src(зависит от другой версии jre), добавляет шрифт будет решить эту проблему.
Я думаю, это не ответ на ваш вопрос, но, возможно, это кто-то, просто для вашей справки.
вы также можете попытаться принудительно разместить каретку в конце текста, используя что-то вроде folloiwng:
JTextArea displayArea;
displayArea.setCaretPosition(displayArea.getDocument().getLength());