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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размещение компоненты на закладке JTabbedPane 
:(
    Опции темы
w1nd
Дата 27.11.2007, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

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



Надеюсь, все в курсе относительно того, что в Java SE 6 появились некоторые нововведения в компонентах Swing. В частности, появилась возможность устанавливать в javax.swing.JTabbedPane не только текст и/или значок для каждой закладки, но и компонент. 

НО. Автор(ы) сего изменения то ли со злобы, то ли от недальновидности решили, что этот компонент не следует растягивать на всю площадь закладки, а следует центрировать. И не предусмотрели никаких настроек на этот случай.

Собственно, задача. Как заставить JTabbedPane размещать компонент по всей площади закладки (разумеется, с учётом отступов) и не лишиться при этом всего многообразия существующих look-n-feel'ов?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
fixxer
Дата 27.11.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



М-м. А можно скриншот неустраивающего поведения? Просто, когда я с этим игрался таких проблем не возникало.


--------------------
user posted image
PM MAIL ICQ   Вверх
w1nd
Дата 27.11.2007, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

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



Смотрите.

Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  tabbedPane.gif 10,45 Kb


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
fixxer
Дата 27.11.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, действительно. Просто я использовал SCROLL_TAB_LAYOUT, поэтому было не заметно.

А собака порыта скорее всего в BasicTabbedPaneUI

Это сообщение отредактировал(а) fixxer - 27.11.2007, 17:08


--------------------
user posted image
PM MAIL ICQ   Вверх
w1nd
Дата 27.11.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

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



Цитата(fixxer @  27.11.2007,  16:41 Найти цитируемый пост)
А собака порыта скорее всего в BasicTabbedPaneUI

Где зарыта несчастная - понятно. Надо бы откопать smile


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
powerOn
Дата 27.11.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Теоретически, добавляя компонент на закладку, мы его добавляем в какой-то контейнер. Практически этот контейнер приватный класс BasicTabbedPaneUI.TabContainer, который судя по исходникам является наследником JPanel. Опять же по теории получив ссылку на контейнер, то можно добавлять туда какой хочешь LayoutManager  и набор подкомпонентов.

Получить ссылку на контейнер можно таким трюком:
Код

JButton jButton = new JButton("Test!");
jTabbedPane1.setTabComponentAt(0, jButton);
Container conteiner = jButton.getParent();


Но вот дальнейшее изменение layout-а, ни к чему не привело :( Вернее установить его можно:

Код

JButton jButton = new JButton("Test!");
jTabbedPane1.setTabComponentAt(0, jButton);
Container conteiner = jButton.getParent();

BorderLayout bl = new BorderLayout();
bl.addLayoutComponent(jButton, java.awt.BorderLayout.CENTER);
conteiner.setLayout(bl);
conteiner.doLayout();


но, чтобы лайаут принял силу, нужно выполнить doLayout() для контейнера, который успешно переопределен разработчиками в классе BasicTabbedPaneUI.TabContainer без вызова метода супер-класса... :( что естественно не позволяет новому LM вступить в силу...

Либо нужно еще копать,  либо придется расширять BasicTabbedPaneUI чтобы подправить логику TabContainer (как пока не знаю)....



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

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.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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