Положение каретки выключено в JTextArea

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

введите здесь описание изображения

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


person Daniel Maly    schedule 05.03.2012    source источник
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 06.03.2012
comment
Это часть приложения из 4,5 тыс. строк, но я могу попробовать...   -  person Daniel Maly    schedule 06.03.2012
comment
@DanielMaly - я согласен с Эндрю. Я проделал довольно много работы с Swing, и ничто в этой проблеме не кажется мне очевидным решением. Ограничьте проблему простой программой, чтобы мы могли ее опробовать. Если вы не можете опубликовать SSCCE, то хотя бы сообщите нам, какие LayoutManagers конкретно вы используете? Пользовательский?   -  person Mike Clark    schedule 06.03.2012
comment
Я нашел проблему. Это было вызвано включением подсказки рендеринга KEY_FRACTIONALMETRICS во время рисования родительского компонента.   -  person Daniel Maly    schedule 06.03.2012
comment
+1 за сообщение об источнике проблемы. Возможно, вам следует ввести это как ответ и отметить его правильно (когда сайт позволяет вам - по памяти это не сразу). Рад, что ты разобрался. :)   -  person Andrew Thompson    schedule 06.03.2012
comment
@DanielMaly добавьте формальный ответ на свой вопрос и отметьте его как принятый. Это нормально, чтобы ответить на свой вопрос.   -  person Mike Clark    schedule 09.03.2012
comment
Просто дружеское напоминание @DanielMaly. И Эндрю, и Майк правы. StackOverFlow рекомендует стандартную процедуру, на которую вы отвечаете сами. Не могли бы вы опубликовать ответ на вопрос самостоятельно, а затем принять этот ответ, чтобы мы могли закрыть этот вопрос? Кроме того, вам необходимо принять ответы на предыдущие вопросы, если они решат вашу проблему. blog.stackoverflow.com/2011/07/< /а>   -  person Zecas    schedule 25.05.2012


Ответы (4)


Попробуй это :

JTextArea textArea;
DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
person Abs    schedule 03.08.2012

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

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

 Rectangle r = textArea.modelToView( textArea.getCaretPosition() );
 int  caretX = r.x;
 int  caretY = r.y;
person Ravi1187342    schedule 29.03.2012

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

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

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

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

Я предполагаю, что это не ответ на ваш вопрос, но, может быть, кто-то столкнется, просто для справки.

person chenyi1976    schedule 19.03.2012

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

JTextArea displayArea;    
displayArea.setCaretPosition(displayArea.getDocument().getLength());
person md1hunox    schedule 12.06.2012