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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Растет размер JTextArea при добавлении текста, Виноват ли GridBagLayout? 
V
    Опции темы
niklep
Дата 18.6.2013, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Приветствую.
Клепаю формочку, на которой в 1 столбец должны расположиться элементы:
1. Объект класса JLabel с некоторой общей информацией.
2. Объект класса JPanel, в которую помещается основное содержимое окна.
3. Ряд кнопок в я строку.
4. Объект класса JTextArea, в который при совершении определенных действий пользователя будет вносится информация (что-то вроде пользовательского лога).

Элементы 1 и 4 должны пополам делить пространство, которое для них остается после объектов 2 и 3. 
Используется для всего этого GridBagLayout.
Код

            // Создается объект класса GridBagConstraints - применяется к JLabel верхней части окна
            GridBagConstraints gbc_label_info = new GridBagConstraints();
            gbc_label_info.gridx      = GridBagConstraints.RELATIVE;
            gbc_label_info.gridy      = GridBagConstraints.RELATIVE;
            gbc_label_info.gridheight = 1;
            gbc_label_info.gridwidth  = GridBagConstraints.REMAINDER;
            gbc_label_info.anchor     = GridBagConstraints.NORTH; 
            gbc_label_info.fill       = GridBagConstraints.BOTH;  
            gbc_label_info.insets     = new Insets(20, 20, 0, 0);
            gbc_label_info.ipadx      = 0;
            gbc_label_info.ipady      = 0;
            gbc_label_info.weightx    = 1.0;
            gbc_label_info.weighty    = 0.5;
            jlabel_info.setVerticalAlignment(JLabel.TOP);
            jlabel_info.setBorder(BorderFactory.createEtchedBorder());
            gbl.setConstraints(jlabel_info, gbc_label_info);
            this.add(jlabel_info);
 
            // Создается объект класса GridBagConstraints - применяется к панели по центру окна
            GridBagConstraints gbc_panel_center = new GridBagConstraints();
            gbc_panel_center.gridx      = GridBagConstraints.RELATIVE; 
            gbc_panel_center.gridy      = GridBagConstraints.RELATIVE;
            gbc_panel_center.gridheight = 1;
            gbc_panel_center.gridwidth  = GridBagConstraints.REMAINDER;
            gbc_panel_center.ipadx      = 0;
            gbc_panel_center.ipady      = 0;
            gbc_panel_center.weightx    = 1.0;
            gbc_panel_center.weighty    = 0.0;
            gbc_panel_center.anchor     = GridBagConstraints.CENTER;
            gbc_panel_center.fill       = GridBagConstraints.NONE;
            JPanel jpanel_center = new JPanel();
            gbl.setConstraints(jpanel_center, gbc_panel_center);
            this.add(jpanel_center);
 
            // Создается объект класса GridBagConstraints - применяется к панели ниже центральной (с кнопками)
            GridBagConstraints gbc_panel_buttons = new GridBagConstraints();
            gbc_panel_buttons.gridx      = GridBagConstraints.RELATIVE; 
            gbc_panel_buttons.gridy      = GridBagConstraints.RELATIVE;
            gbc_panel_buttons.gridheight = 1;
            gbc_panel_buttons.gridwidth  = GridBagConstraints.REMAINDER;
            gbc_panel_buttons.insets     = new Insets(60, 0, 0, 0);
            gbc_panel_buttons.ipadx      = 0;
            gbc_panel_buttons.ipady      = 0;
            gbc_panel_buttons.weightx    = 1.0;
            gbc_panel_buttons.weighty    = 0.0;
            gbc_panel_buttons.fill       = GridBagConstraints.BOTH;
            gbc_panel_buttons.anchor     = GridBagConstraints.SOUTH;
            JPanel jpanel_buttons = new JPanel();
            gbl.setConstraints(jpanel_buttons, gbc_panel_buttons);
            this.add(jpanel_buttons);
 
            // Создается объект класса GridBagConstraints - применяется к текстовому полю в нижней части окна
            GridBagConstraints gbc_panel_log = new GridBagConstraints();
            gbc_panel_log.gridx      = GridBagConstraints.RELATIVE; 
            gbc_panel_log.gridy      = GridBagConstraints.RELATIVE;
            gbc_panel_log.gridheight = 1;
            gbc_panel_log.gridwidth  = GridBagConstraints.REMAINDER;
            gbc_panel_log.ipadx      = 0;
            gbc_panel_log.ipady      = 0;
            gbc_panel_log.weightx    = 1.0;
            gbc_panel_log.weighty    = 0.5;
            gbc_panel_log.anchor     = GridBagConstraints.CENTER;
            gbc_panel_log.fill       = GridBagConstraints.BOTH;
            gbl.setConstraints(jscroll_log, gbc_panel_log);
            jscroll_log.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
            jscroll_log.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            jtext_log.setEditable(false);
            jtext_log.setWrapStyleWord(true);
            jtext_log.setLineWrap(true);
            this.add(jscroll_log);

Сначала все выглядит неплохо. Но jtext_log при добавлении текста
Код

jtext_log.append("Текст\n\r");

ведет себя странно: увеличивается по высоте. Вот скриншоты:
Запускаем окно
Выполняем несколько раз действие, которое вставляет текст в jtext_log
Скроллбар появился, все элементы уже перекосило
Я ожидаю, что при добавлении текста у jtext_log просто появится скроллбар. Но при добавлении первых 20 строчек он не появляется, собственно, на скриншотах это видно.
Причем если я вписываю текст с клавиатуры, все нормально...
Есть у кого-то идеи?
PM MAIL   Вверх
Mirkes
Дата 19.6.2013, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я нe уверен, но скорее всего может помоч' такой прием:
создаем панел'. В нее кладем JScrollPane в котором будет текст.


--------------------
Mirkes
PM MAIL   Вверх
niklep
Дата 21.6.2013, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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