![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| kaa2006 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
Привет Всем.
Интересует вопрос вот есть таблица с иерархическими заголовками необходимо в ней добавлять столбцы и удалять. Но не в представление таблицы, а в модель. Как это можно сделать. Есть прием пересоздавать каждый раз при добавлении модель таблицы но с обычной таблицей проблем не было, а вот с иерархической возникают проблемы возникает исключение NullpointerException. Я конечно понимаю, что это исключение возникает если какой-то элемент обнулен. Даже знаю какой, но почему не могу понять. Если есть какие-то решения буду очень сильно благодарен. Пример иерархической таблицы взят с http://www.crionics.com/products/opensourc...eExamples1.html Groupable Header |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Странно, но их пример у меня не заработал. Вернее заработал, но я увидел лишь нижнюю строку заголовка (я прикрепил изображение, посмотрите, если интресно конечно).
По теме: в примере используется обычная модель DefaultTableModel, а значит никаких дополнительных наворотов на неё не вешали. Так что можешь реализовать свою "удобную" модель и использовать совместно с иерархическими заголовками. Но конечно же придестя при удалении колонки из модели удалять и лишний заголовок из представления. Подробнее надо разбираться с кодом. Присоединённый файл ( Кол-во скачиваний: 20 )
image.JPG 13,45 Kb |
|||
|
||||
| kaa2006 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
У меня все нормально с иерархическими заголовками реализацию всех элементов таблице необходимо делать в конструкторе и с выводом будет все нормально только при добавлении нового столбца в модели необходимо добавить заголовок и 2 подзаголовока
все эти операции выполняются нормально, но когда нужно выводить на экран новые столбцы возникает исключение NullPointerException в файле GroupableTableHeaderUI.java в методе private int getHeaderHeight() в строке TableCellRenderer renderer = aColumn.getHeaderRenderer(); так как renderer=null. Не могу понять почему? Как тут картинку прикрепить? |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
В не быстром ответе, ниже смайлов темы кнопка "обзор" |
|||
|
||||
| kaa2006 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
Это изображение моей таблицы.
Только вот при начальной инициализации renderer не нулевой. А при изменении модели таблицы почему то не срабатывает. |
|||
|
||||
| kaa2006 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
Незнаю что то у меня на форуме не отображается прикрепленный файл.
Повторно пробую. Присоединённый файл ( Кол-во скачиваний: 18 )
tableTree.GIF 33,11 Kb |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Выкладывай код.
|
|||
|
||||
| kaa2006 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
Вот код
инициализация таблицы и добавление:
А все остальные файлы возьмешь с http://www.crionics.com/products/opensourc...eExamples1.html Groupable Header только надо во всех файлах поменять package Спасибо большое за помощь. |
|||
|
||||
| kaa2006 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
Хотел узнать получилось что-нибудь с добавлением и удалением столбцов из модели иерархической таблицы?
|
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Я пытался запустить Ваш пример, но NullPointerException в методе getHeaderHeight() вылетал не только при добавлении столбцов, но даже при попытке таблицу отобразить. Вот мною пофиксиный GroupableTableHeaderUI [изменения только в методах paintCell(Graphics g, Rectangle cellRect, int columnIndex) и getHeaderHeight()] :
|
|||
|
||||
| kaa2006 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
У меня JDK 1.4, но 1.5 тоже должно работать.
Но мне не понятно, а почему при создании групп с renderer было все нормально, а при отображении он становиться нулевым. Где он обнуляется ? Решение это простое взять там где определяется renderer сделать проверку. Но я сделал по другому может даже как-то коряво при добавлении пересоздаю данную таблицу с нужным количеством столбцов, а потом присвоевую новую таблицу прежней, но это чтобы голову не забивать что в классах с http://www.crionics.com/products/opensourc...eExamples1.html Groupable Header. Но у меня вопрос такое решение не уменьшит скорость выполнение программы в целом? |
|||
|
||||
| powerOn |
|
||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Должно, да не работает... Он при создании не устанавливается, это значение по умолчанию. Вот что в доке написано:
Т.е. я так понимаю, что если headerRenderer = null, то UI и другие объеты нуждающиеся в headerRenderer, должны самостоятельно использовать, так сказать на свое усмотрение, какой-либо Renderer. Системные UI и прочие объекты, в таких случаях, используют JTableHeader().getDefaultRenderer(). И класс GroupableTableHeaderUI вероятно, должен был его использовать, но не делает этого, что ведет к NullPointerException...
Не понял, всю таблицу целиком или только модель?
Выполнение любого дополнительного действия однозначно уменьшить скорость выполнения. Чтоб увеличить скорость нужно от каких-то операций избавляться, а не прибавлять их. Это сообщение отредактировал(а) MoonCat - 14.8.2006, 12:26 |
||||||
|
|||||||
| kaa2006 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
Но насколько я знаю, что сама таблица является элементом визуализации, а все данные хранятся в модели, поэтому необходимо при добавлении или уменьшении столбцов изменять модель таблицы.
|
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Да все правильно. И Вашем случае так же надо делать, но! Если нужно добавить столбцы или строки, то соответствующим образом меняется модель. Но так как Вы имеете нестандартный JTableHeader, то нужно учитывать и его логику работы. Ведь когда мы использовали стандартные компоненты таблицы, то все внутренние механизмы были реализованны за нас. Мы лишь использовали их не вникая в подробности той же прорисовки. Здесь другое дело, т.к. мы используем свой собственный механизм для отображения заголовка таблицы (JTableHeader и его UI), то и нам заботиться о корректности его работы и совместимости со стандартными механизмами таблицы, с то же TableModel. Чего лично я пронаблюдать не успел, но в том причина моя JDK 1.5.0.7. |
|||
|
||||
| kaa2006 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
Так я не понял, что с SDK 1.5.0.7 совсем неотображаются иерархические заголовки.
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |