| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: GUI и Java FX приложения > JTextArea+прокрутка |
| Автор: force 27.4.2007, 09:06 |
| Есть некая панель. В ней находится много контролов, а внизу самом JTextArea. Эта панель находится в JScrollPane. ТАк вот при вызове метода setText у JTextArea панель автоматически прокручивается в самый низ. Нужно же, что ничего не менялось, т.е. чтобы скрол так и оставался в верхнем положении. Программно попытка установить скролл в верхнее положение после вызова setText также не проходит (его положение не изменяется). Проблема явно связана с изменением положения каретки. Если принудительно поставить setCaretPosition(0), то тогда панель прокручивается не до самого низа, а то первой строки JTextArea (что тоже нехорошо, нужно чтобы setText никак не влиял на положение скрола). Версия Java 1.42_05 (другую использовать не имею возможности). |
| Автор: dorogoyIV 27.4.2007, 11:26 |
| попробуй вместо setText JTextArea.append(); у меня по крайней мере работает так как ты хочешь. |
| Автор: nornad 27.4.2007, 15:05 |
| Можно ещё попробовать вместо setCaretPosition(0) использовать установку фокуса на один из верхних контролов в скроллпейне (контрол.requestFocus()). |
| Автор: dorogoyIV 29.4.2007, 13:18 |
| и пометь пожалуйста вопрос как решенный если нашел ответ не ленись. а то начинают возникать подозрения... в чем же дело?... |
| Автор: nornad 29.4.2007, 15:22 |
| Думаю, он просто ещё не успел появиться на форуме после наших ответов. |
| Автор: dorogoyIV 29.4.2007, 20:18 | ||
видел я его в онлайне |
| Автор: powerOn 29.4.2007, 23:00 | ||
|
| Автор: force 30.4.2007, 16:06 |
| Вопрос то на самом деле не решен. append не помогает. Аналогично вся панель прокручивается вниз. Возможно это проблема Java 1.42_05 такая. Фокус пробовал ставить на верхний контрол, скрол прокручивается обратно вверх, но не до конца. Может быть несколько нерпаивльно понимается, как у меня размещены контролы. Ещё раз попробую описать. Есть JScrollPane, в нем находится некая панель (пусть panel1). В ней находится 3 панели (сверху вниз), для каждой установлено titledBorder. Верхняя содержить просто много JLabel. Следующая за ней таблиц и самаяч нижняя JTextArea. Если в JTextArea текст не устанавливать, то все прекрасно работает, вниз не прокручивается (изначально высота основной панели такая, что JTextArea даже без текста не виден, т.е. есть скрол). Как только вызывает для JTextArea setText или append, то прокручивается самая главная панель (panel1) вниз. |
| Автор: nornad 30.4.2007, 18:38 | ||
Попробуй сделать так:
|
| Автор: force 30.4.2007, 21:33 |
| nornad, Спасибо, попробую. Но ведь append просто добавляет в конец. А как до этого очистить textArea, чтобы скрол вниз не прокрутился, хотя по идее setText("") не будет прокручивать (не пробовал пока ещё). |
| Автор: nornad 1.5.2007, 00:16 |
Просто сразу используй setText(), а не append(). Успешность метода не гарантирую, но шансы есть - фокус на компонент падать не должен, а значит и прокрутка не должна бы идти до него... |
| Автор: dorogoyIV 1.5.2007, 02:02 | ||||||
вот работающий код:
если поиграешь с 25 и 26 строкой, увидишь разницу также обрати внимание на строку:
сразу написан пробел. если его убрать и написать:
опять будет прокручивать вниз. думаю дальше надо делать как говорил nornad, но я не проверял. |
| Автор: force 1.5.2007, 16:28 |
| B]nornad[/B], Нет, метод не прошел. ВСе равно прокручивается. dorogoyIV, Большое спасибо! То, что надо. Но вот с очисткой всего этого проблемы. setText ("") вызывается нормально, но после него при добавлении прокручивакется вниз (вызов setText(" ") само прокручивает). Единственное возможное решение, которое я вижу, это удалять компонент и создавать заново при каждом добавлении текста. Но это как-то криво. Я только не понимаю, зачем нужно было так мудрить с JTextArea. Зачем делать по умолчанию эту прокрутку ?! |
| Автор: dorogoyIV 1.5.2007, 17:00 | ||
если тебя устроит, то здесь поможет jTextArea.setEditable(false); |
| Автор: force 1.5.2007, 17:20 |
| dorogoyIV, И чем он мне может помочь, что-то слабо понял. Мне нужно всего лишь при нажатии на кнопку Text в вашем примере текст не добавлялся к текущему содержимому, а просто устанавливался (ну и не прокручивался). |
| Автор: dorogoyIV 1.5.2007, 17:25 | ||
мой пример показывает в общих чертах. тебе надо подстраивать под свой код (я то его не видел). |
| Автор: force 1.5.2007, 18:09 |
| dorogoyIV, ОК, спасибо за помощь! Буду разбираться тщательно в этом. Вопрос можно сказать решен. |
| Автор: force 2.5.2007, 17:41 |
| Вот правильное решение проблемы, если кому интересно. Нашел в списке багов Swing на сайте Sun: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4476714 Там есть решение проблемы и для версий старше 1.5, и для 1.5. и новее. |
| Автор: IceQueen 16.5.2007, 15:17 | ||||
сделаи отдельный клас: ТextAreaStream , а потом в mainFrame добавь
========================
|