Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
4 / 4 / 0
Регистрация: 10.03.2010
Сообщений: 44

Увеличивается размер JTextArea при добавлении в него текста. Виноват GridBagLayout?

18.06.2013, 06:24. Показов 2375. Ответов 2
Метки нет (Все метки)

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

Элементы 1 и 4 должны пополам делить пространство, которое для них остается после объектов 2 и 3.
Используется для всего этого GridBagLayout.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
            // Создается объект класса 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 при добавлении текста
Java
1
jtext_log.append("Текст\n\r");
ведет себя странно: увеличивается по высоте. Вот скриншоты:
Запускаем окно
Выполняем несколько раз действие, которое вставляет текст в jtext_log
Скроллбар появился, все элементы уже перекосило

Я ожидаю, что при добавлении текста у jtext_log просто появится скроллбар. Но при добавлении первых 20 строчек он не появляется, собственно, на скриншотах это видно.
Причем если я вписываю текст с клавиатуры, все нормально...
Есть у кого-то идеи?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2013, 06:24
Ответы с готовыми решениями:

Увеличивается ширина при добавлении
Добавляю картинку <div id="text"> <img src="cot.jpg" class="cot"> </div> и при обновлении появляются ползунки (ну то есть я...

Почему при добавлении в вектор нового элемента capacity увеличивается с запасом?
Почему vector.size() не всегда равен vector.capacity()? Можно же было в реализации вектора при добавлении нового элемента перераспределять...

Почему переменная не увеличивается при добавлении константы в конструкторе(статические поля класса)?
Всем привет! Учу статические поля класса (книга Лафоре). Простой пример, который работает. При появлении каждого объекта конструктор ...

2
4 / 4 / 0
Регистрация: 10.03.2010
Сообщений: 44
21.06.2013, 09:58  [ТС]
Может кому-то пригодится. Проблему решил так:
При создании JTextArea передал в конструктор количество строк и столбцов. Можно передать даже (0,0). И JTextArea перестает менять размер.
0
0 / 0 / 0
Регистрация: 21.02.2016
Сообщений: 60
27.02.2016, 20:59
niklep, Один хрен растягивается по ширине
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2016, 20:59
Помогаю со студенческими работами здесь

Увеличивается размер файла при записи
Всем привет. Возник такой вот вопрос. Программа записывает раз за разом(не добавляя в конец а перезаписывая) в один и тот же файл объект с...

Увеличивается размер шрифта при переносе в powerpoint
Доброго времени суток! При переносе текста из документа Word 2003 в PowerPoint происходит увеличение шрифта с 11 до 44. Кто- нибудь может...

При подключении HDMI увеличивается размер экрана на ноутбуке
Есть ноутбук с Windows 7. Решил вывести звук через HDMI. После шнурка идёт конвертер, на выходе которого есть HDMI, SPDIF, COAX, и...

CoIDE + GCC при включении LTO размер файла увеличивается
Здравствуйте! Если верить этой статье http://www1.coosox.org/forum/topys.php?id=3004, то при активации Link Time Optimizotion размер...

При нажатии кнопки переменная увеличивается на 1, при зажатии каждую секунду увеличивается на 1
Подскажите пожалуйста, как лучше реализовать: На экране есть кнопка. При нажатии переменная увеличивается на 1, при зажатии каждую секунду...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru