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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTableHeader setPreferredSize 
:(
    Опции темы
PashaOvechkin
Дата 6.6.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Привет!

Сабж

Код


        // table is instance of JTable
        TableColumnModel model = table.getTableHeader().getColumnModel();
        model.getColumn(0). ... // setPreferredSize or setHeight  needed here

PM MAIL Skype   Вверх
PashaOvechkin
Дата 6.6.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



или 
Код


model.getColumn(0). ... // getPreferredSize or getHeight  needed here


PM MAIL Skype   Вверх
COVD
Дата 6.6.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

table.getTableHeader().setPreferredSize(new Dimension(0, headerHeight));

PM MAIL   Вверх
PashaOvechkin
Дата 6.6.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не годиться... 

я в хедер добаляю TableCellRenderer
таким образом 
model.getColumn(0).setHeaderRenderer(...);


и он ужасно раздувает хедер...
Нужно кастомить именно ячейку... 
PM MAIL Skype   Вверх
COVD
Дата 6.6.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



тогда аналогично сделать хедеру также и setMaxSize(..) , где ширина=0 и макс высота - высота у всех ячеек все равно одна.

Это сообщение отредактировал(а) COVD - 6.6.2008, 15:53
PM MAIL   Вверх
PashaOvechkin
Дата 6.6.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, нтак не получиться.
Ситуация не так проста, как кажется...

Если делать как Вы подсказываете, максСизе ограни4ивает "раздув6уюся" часть хедера... и разница мезду кастомной ячеикой и стандартной есть.

Её можно видеть в атачменте.

Это сообщение отредактировал(а) PashaOvechkin - 6.6.2008, 16:09

Присоединённый файл ( Кол-во скачиваний: 69 )
Присоединённый файл  header.JPG 9,08 Kb
PM MAIL Skype   Вверх
w1nd
Дата 8.6.2008, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Уже была здесь такая же тема вроде. Не получится сделать такой renderer для заголовка, чтобы не отличался от стандартного при установленном WLAF в стиле XP. 

Это сообщение отредактировал(а) w1nd - 8.6.2008, 01:47


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


Опытный
**


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

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



w1nd, вы наблюдательны smile
Правда похожая тема была. Но сейчас я поработал с гуи и понял корень проблемы.
И не хочется верить что сделать етого нельзя. (да и проблема актуальна не только но ХП лук ен филе, она имеет место на
всех ЛФ) 
Вот. Хедер становится излищне высоким, и без стандартбых ЛФ ли4 (onMouseOver, и тд и тп)
PM MAIL Skype   Вверх
w1nd
Дата 9.6.2008, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(PashaOvechkin @  8.6.2008,  13:33 Найти цитируемый пост)
И не хочется верить что сделать етого нельзя.

Этого нельзя сделать с WLAF в XP-стиле. Во всех остальных случаях придётся использовать классы, специфичные для каждого конкретного PLAF (напрямую или выдирая куски кода оттуда), к сожалению. Кстати, а зачем вы вообще замещаете стандартный рендерер?

Это сообщение отредактировал(а) w1nd - 9.6.2008, 00:17


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


Опытный
**


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

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



Что мне нужно сейчас  - ето просто установить размеры хедера... А ето явно не зависит от ЛФ, так как размеры одинаково раздуты при ЛЮБОМ ЛФ.

Зачем нужно замещать рендерер?
А каким образом иначе можно вставить чек бокс в хедер?
(Нужно реализовать select All функцию в таблице... Может есть предложения?)

Это сообщение отредактировал(а) PashaOvechkin - 9.6.2008, 10:54
PM MAIL Skype   Вверх
COVD
Дата 9.6.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Стандартный рендерер - класс, наследуемый от JLabel. Ваш кастомный рендерер, очевидно, надо наследовать от JPanel. В нем разместить чекбокс и лейбол с текстом. Ваш рендерер должен возвращать в методе public Component getTableCellRendererComponent(...  панель, т.е. this. Размер этой панели будет регулироваться извне. Если вы зададите для хедера prefferedSize, Max/MinSize, то и панель будет подчиняться этим установкам точно также, как это делает дефолтный рендерер наследуемый от JLabel.  
PM MAIL   Вверх
w1nd
Дата 9.6.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(COVD @  9.6.2008,  20:32 Найти цитируемый пост)
Размер этой панели будет регулироваться извне. Если вы зададите для хедера prefferedSize, Max/MinSize, то и панель будет подчиняться этим установкам точно также, как это делает дефолтный рендерер наследуемый от JLabel. 

Не всё так просто. На стандартном рендерере висит UI-класс, который может рисовать что-то совершенно особенное, и это особенное очень не хочется терять (градиенты, финтифлюшечки всякие; в случае с WLAF-XP ээто особенное находится вовсе в нативном коде). Можно поступить следующим образом: создать renderer-обёртку, который будет делегировать рисование обёрнутому, но добавлять поверх что-то своё - таким образом можно будет сохранить фон. Если очень хочется в заголовок поместить компонент, то встраивать его следует так же, как встраивается editor в таблицу.

Это сообщение отредактировал(а) w1nd - 9.6.2008, 23:06


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


Опытный
**


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

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



Спасибо за отзывчивость ребята! 
w1nd, а можно пример кода? Примерно как имелось ввиду отнаследовать стандартный УИ рендерер?
 smile 


На самом деле проблему уже решил, но иначе (хуже) переопределил paintComponent(Graphics g)
 для всех актуалņых PLAFов smile
Не кашерно... А что поделаешь?! 
Иначе выглядит как в сортире smile
PM MAIL Skype   Вверх
w1nd
Дата 10.6.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ну что-то в этом духе:

Код
public class MyRenederer {

    public MyRenderer(... delegate) {
    }

    /*
     * Все методы делегируются delegate, кроме paint (именно paint, а не paintComponent)
     */

    public void paint(Graphics graphics) {
        delegate.paint(...);

        ... // а тут что-то своё
    }

}


Или, пожалуй, будет даже лучше добавлять внутрь своего рендерера исходный.


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


Опытный
**


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

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



w1nd, а в чём разница между : paint  и paintComponent ??

Хочется понять из глубины

PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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