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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> fireTableDataChanged сбрасывает высоту рядов, а без обновления модели JTable в порядке 
V
    Опции темы
_Y_
Дата 25.1.2011, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот такое явление наблюл. Почему происходит не понимаю smile 
  • Создаю таблицу JTable
  • Устанавливаю для каждого ряда свое значение высоты методом setRowHeight(row, height)
  • Красотища!
  • Програмно изменяю данные в таблице
  • Для обновления данных на экране запускаю метод модели fireTableDataChanged() (метод унаследован от AbstractTableModel)
  • Высота всех рядов возвращается к значению по умолчанию
Объясните пожалуйста почему. И как грамотно побороть подлый феномен?


Это сообщение отредактировал(а) _Y_ - 25.1.2011, 19:01


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
COVD
Дата 25.1.2011, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



fireTableDataChanged()  означает, что количество строк в модели тоже возможно поменялось, поэтому предыдущие установки высоты для каждой строки отменяются. Все логично. Придется повторить пункт "Устанавливаю для каждого ряда свое значение высоты методом setRowHeight(row, height)". Или использовать другой fire...

Это сообщение отредактировал(а) COVD - 25.1.2011, 19:44
PM MAIL   Вверх
jk1
Дата 25.1.2011, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



_Y_

Раз Вы устанавливаете разные значения высоты для разных строк, значит высота определяется разными данными в этих строках.
А раз так, может быть проще написать соответствующий Renderer для этих данных?

Вот тривиальный пример установки высоты по самой высокой ячейке в ряду. Ничего не мешает поместить в него какую-нибудь логику определения высоты исходя из данных в ячейке или номера столбца, или еще чего-нибудь.
Код

public Component getTableCellRendererComponent(JTable table, Object value,
                                                 boolean isSelected,
                                                 boolean hasFocus, int row,
                                                 int column) {
      int height = new Double(getPreferredSize().getHeight()).intValue();
      if (table.getRowHeight(row) < height)
          table.setRowHeight(row, height);    
      return this;
  }




--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
_Y_
Дата 25.1.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



COVD, спасибо. сделал методом fireTableRowsUpdated(0, rows - 1);

jk1, этот вариант мне не годится. Тогда все ряды подгоняются под данные. У меня же две категории рядов - внутритабличные заголовки и просто данные. Заголовки уже. Так таблица красивее получается.

Спасибо!


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
jk1
Дата 26.1.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



_Y_

Из чистого любопытства: что мешает внутри renderer'a понять что в данный момент мы рисуем заголовок и установить для данной ячейки требуемый размер?


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
COVD
Дата 26.1.2011, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

что мешает внутри renderer'a понять что в данный момент мы рисуем заголовок 

Единственный надежный вариант, наверное, это если renderer'ы будут знать номера строк заголовков. И если строки будут разной высоты и это будет задаваться renderer'ами в процессе перерисовки, то, интересно, как себя будет чувствовать механизм скроллинга?

Но вообще, для заголовков есть header. "Внутритабличные заголовки" не позволяют делать в таблице сортировку строк, фильтрацию. Таблица должна быть однородна, отображать один тип данных. 
PM MAIL   Вверх
_Y_
Дата 26.1.2011, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



jk1, ничего не мешает. Но зачем сложности если можно просто?

Цитата(COVD @  26.1.2011,  15:03 Найти цитируемый пост)
"Внутритабличные заголовки" не позволяют делать в таблице сортировку строк, фильтрацию. Таблица должна быть однородна, отображать один тип данных. 
 Это не совсем так. Просто принцип сортировки и фильтрации становится многоступенчатым и должен быть специально описан.
----------------- 
ЗЫ: К моей задаче это не относится - ни сортировки, ни фильтрации smile 

Это сообщение отредактировал(а) _Y_ - 26.1.2011, 20:09


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0869 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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