2012-03-05 4 views
13

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

enter image description here

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

+5

Для лучшей помощи раньше, опубликовать [SSCCE] (http://sscce.org/). –

+0

Это часть приложения с 4,5 тыс. Строк, но я могу попробовать ... –

+1

@ DanielMaly - Я согласен с Андреем. Я сделал довольно много работы Swing, и ничто об этой проблеме не выпрыгивает на меня, поскольку явное решение. Изолируйте проблему простой программой, чтобы мы могли ее попробовать. Если вы не можете опубликовать SSCCE, то, по крайней мере, сообщите нам, что вы используете LayoutManagers * специально *. Пользовательский? –

ответ

0

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

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

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

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

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

1

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

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

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^