Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTextArea+прокрутка 
V
    Опции темы
force
Дата 27.4.2007, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 20.11.2005

Репутация: нет
Всего: нет



Есть некая панель. В ней находится много контролов, а внизу самом JTextArea.  Эта панель находится в JScrollPane. ТАк вот при вызове метода setText у JTextArea панель автоматически прокручивается в самый низ. Нужно же, что ничего не менялось, т.е. чтобы скрол так и оставался в верхнем положении. Программно попытка установить скролл в верхнее положение после вызова setText также не проходит (его положение не изменяется). Проблема явно связана с изменением положения каретки. Если принудительно поставить setCaretPosition(0), то тогда панель прокручивается не до самого низа, а то первой строки JTextArea (что тоже нехорошо, нужно чтобы setText никак не влиял на положение скрола).
Версия Java 1.42_05 (другую использовать не имею возможности).

Это сообщение отредактировал(а) force - 27.4.2007, 09:09
PM MAIL   Вверх
dorogoyIV
Дата 27.4.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



попробуй вместо setText JTextArea.append();
 у меня по крайней мере работает так как ты хочешь.

Это сообщение отредактировал(а) dorogoyIV - 27.4.2007, 11:28
PM MAIL   Вверх
nornad
Дата 27.4.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 6
Всего: 31



Можно ещё попробовать вместо setCaretPosition(0) использовать установку фокуса на один из верхних контролов в скроллпейне (контрол.requestFocus()).


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
dorogoyIV
Дата 29.4.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



и пометь пожалуйста вопрос как решенный если нашел ответ  smile 

не ленись.  smile 

а то начинают возникать подозрения... в чем же дело?...

Это сообщение отредактировал(а) dorogoyIV - 29.4.2007, 14:16
PM MAIL   Вверх
nornad
Дата 29.4.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 6
Всего: 31



 smile 
Цитата(dorogoyIV @  29.4.2007,  16:18 Найти цитируемый пост)
не ленись.

Думаю, он просто ещё не успел появиться на форуме после наших ответов.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
dorogoyIV
Дата 29.4.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата

Думаю, он просто ещё не успел появиться на форуме после наших ответов.


видел я его в онлайне  smile 
PM MAIL   Вверх
powerOn
Дата 29.4.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159




M
powerOn
Господа, прекращаем оффтопить.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
force
Дата 30.4.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 20.11.2005

Репутация: нет
Всего: нет



Вопрос то на самом деле не решен.  append не помогает. Аналогично вся панель прокручивается вниз. Возможно это проблема Java 1.42_05  такая. Фокус пробовал ставить на верхний контрол, скрол прокручивается обратно вверх, но не до конца.
Может быть несколько нерпаивльно понимается, как у меня размещены контролы. Ещё раз попробую описать.
Есть JScrollPane, в нем находится некая панель (пусть panel1). В ней находится 3 панели (сверху вниз), для каждой установлено titledBorder. Верхняя содержить просто много JLabel. Следующая за ней таблиц и самаяч нижняя JTextArea. Если в JTextArea текст не устанавливать, то все прекрасно работает, вниз не прокручивается (изначально высота основной панели такая, что JTextArea даже без текста не виден, т.е. есть скрол). Как только вызывает для JTextArea setText или append, то прокручивается самая главная панель (panel1) вниз.

Это сообщение отредактировал(а) force - 30.4.2007, 16:10
PM MAIL   Вверх
nornad
Дата 30.4.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 6
Всего: 31



Попробуй сделать так:
Код

textArea.setFocusable( false );
textArea.append( str );
textArea.setFocusable( true );



--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
force
Дата 30.4.2007, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 20.11.2005

Репутация: нет
Всего: нет



nornad, Спасибо, попробую. Но ведь append просто добавляет в конец. А как до этого очистить textArea, чтобы скрол вниз не прокрутился, хотя по идее setText("")  не будет прокручивать (не пробовал пока ещё).

Это сообщение отредактировал(а) force - 30.4.2007, 22:04
PM MAIL   Вверх
nornad
Дата 1.5.2007, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 6
Всего: 31



Цитата(force @  1.5.2007,  00:33 Найти цитируемый пост)
А как до этого очистить textArea,

Просто сразу используй setText(), а не append().
Успешность метода не гарантирую, но шансы есть - фокус на компонент падать не должен, а значит и прокрутка не должна бы идти до него...


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
dorogoyIV
Дата 1.5.2007, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



вот работающий код:

Код

import java.awt.*;
import javax.swing.*;
import javax.swing.JTextArea;
import javax.swing.JButton;
import java.awt.event.*;

public class ScrollPane extends JFrame
{
 JTextArea jta;
 JButton jb;

 public ScrollPane(String s) 
 {
  super(s);
  setBounds(100,100,300,100);
  setResizable(false);
  setLayout(new BorderLayout());
  JLabel label = new JLabel("panel 2"); 
  jta=new JTextArea(" ");
  jb=new JButton("Text");
  jb.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    jta.append("1"+'\n'+"2"+'\n'+"3");
//    jta.setText("1"+'\n'+"2"+'\n'+"3");
   }
  });
  JPanel p1=new JPanel();
  JPanel p2=new JPanel();
  JPanel p3=new JPanel();
  p1.add(jb);
  p2.add(label);
  p3.add(jta);
  JPanel p4=new JPanel();
  p4.setLayout(new BorderLayout());
  p4.add(p1,BorderLayout.NORTH);
  p4.add(p2,BorderLayout.CENTER);
  p4.add(p3,BorderLayout.SOUTH);
  int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; 
  int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;

  JScrollPane scrollPane = new JScrollPane(p4,v,h); 
  add(scrollPane, BorderLayout.CENTER); 
 } 

 public static void main(String[]args)
 {
  JFrame ScrollPane=new ScrollPane("panels");
  ScrollPane.setVisible(true);
  ScrollPane.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}


если поиграешь с 25 и 26 строкой, увидишь разницу  smile 

также обрати внимание на строку:
Код

  jta=new JTextArea(" ");

сразу написан пробел. если его убрать и написать:
Код

  jta=new JTextArea();

опять будет прокручивать вниз.
думаю дальше надо делать как говорил nornad, но я не проверял.

Это сообщение отредактировал(а) dorogoyIV - 1.5.2007, 03:15
PM MAIL   Вверх
force
Дата 1.5.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 20.11.2005

Репутация: нет
Всего: нет



B]nornad[/B], Нет, метод не прошел. ВСе равно прокручивается.

dorogoyIV,  Большое спасибо! То, что надо. Но вот с очисткой всего этого проблемы. setText ("") вызывается нормально, но после него при добавлении прокручивакется вниз (вызов setText(" ") само прокручивает). Единственное возможное решение, которое я вижу, это удалять компонент и создавать заново при каждом добавлении текста. Но это как-то криво.

Я только не понимаю, зачем нужно было так мудрить с JTextArea. Зачем делать по умолчанию эту прокрутку ?!
PM MAIL   Вверх
dorogoyIV
Дата 1.5.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата

удалять компонент и создавать заново при каждом добавлении текста. Но это как-то криво.


если тебя устроит, то здесь поможет jTextArea.setEditable(false);
PM MAIL   Вверх
force
Дата 1.5.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 20.11.2005

Репутация: нет
Всего: нет



dorogoyIV,  И чем он мне может помочь, что-то слабо понял. Мне нужно всего лишь при нажатии на кнопку Text в вашем примере текст не добавлялся к текущему содержимому, а просто устанавливался (ну и не прокручивался).
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1181 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.