![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
ReFLeXive |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
Здравствуйте!
Пишу курсовую по базам данным. Столкнулся с такой проблемой: программа зависает и валит exception's в stacktrace при добавлении JTable в JScrollPane. Делал следующим образом: 1) сперва создал table model на основе AbstractTableModel. В этой модели реализовал методы getRowCount, getColumnCount, getColumnName, getColumnClass, getValueAt. Конструктор получает в качестве аргумента ArrayList с объектами 2) В JFrame вставил JScrollPane 3) Далее создал таблицу на основе модели и встроил ее в JScrollPane следующим образом:
ПРи запуске приложения программа тут же уходит в режим Debug (breakpoint'ы не стоят) и там выдает 4-5 вот таких exception:
Подскажите, пожалуйста, как сделать, чтобы табличка нормально заработала в программе? PS. Также есть реализация модели таблицы через интерфейс TableModel - результат аналогичный.... |
||||
|
|||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Мне почему-то кажется, что вставлять содержимое в JScrollPane надо при ее создании. Вроде этого:
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
ReFLeXive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
Сделал, как вы посоветовали, однако ничего не изменилось. Почему то примеры из Интернета ( брал код вот отсюда ) вполне нормально запускаются! Возможно, дело в том, что там использовался renderer для ячеек, но, я думаю, что просто вывести данные из листа объектов можно гораздо проще... |
|||
|
||||
pathfinder |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 7 Всего: 10 |
Означает что отсутствует Renderer для колонки. Это скорее всего из-за того, что в модели
метод
возвращяет для некоторых колонок классы примитивных типов
если это так, то вместо классов примитивных типов нужно возвращать классы оболочек над примитивными типами
|
||||||||||
|
|||||||||||
ReFLeXive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
pathfinder, Спасибо за ответ!
В модельках у меня в основном String и int, в 2х местах есть BigDecimal и в 3х местах Date. Вот пример метода из одной модели
Может быть, в самом конце return null во всем виноват? |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Возвращать null из метода getColumnClass() совершенно точно не стоит. Хорошей практикой будет такой switch:
То есть строкой будет считаться все, для чего класс не указали в явном виде. Это сообщение отредактировал(а) jk1 - 12.5.2010, 17:35 -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
ReFLeXive |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
Подправил модельку как сказал уважаемый jk1, также добавил в остальных методах вариант default у switch. Выложу ее сюда, может быть есть еще какие то косяки:
сategoryList заполнил пока ручками для тестов таким образом:
Ставил breakpoint и смотрел не пустой ли вдруг лист, но все нормально лист не пустой. Еще такой вопрос: в методе getValueAt() какой вариант возвращать по умолчанию? я написал 0, но не знаю, правильно ли это... |
||||
|
|||||
pathfinder |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 7 Всего: 10 |
Я бы кинул эксепшн, т.к. значение columnIndex в методе getValueAt() никак не может быть больше чем значение возвращаемое методом getColumnCount().
Как раз таки именно из-за этого в твоем первоначальном варианте в методе getColumnClass() вместо того что-бы бросить эксепшн, ты возвращал null. Эксепшн сразу бы указал на то, что количество колонок, возвращаемое методом getColumnCount(), больше чем реально используемое в методах getColumnClass(), getValueAt(), setValueAt(). |
|||
|
||||
ReFLeXive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
Подсккажите как это правильно сделать? прежде не сталкивался с подобным... НАписал следующее:
Но IDE ругается, что нужно что-нибудь вернуть из метода getValueat(), т.к. у него тип возвращаемого значения стоит Object. Т.е. пустой return не срабатывает, а если убрать return, то IDE опять ругается, что нужно вернуть значение из функции... |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
-------------------- Opinions are like assholes — everybody has one |
|||
|
||||
ReFLeXive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
Поменял Integer.TYPE на Integer.class и (О, чудо!!!!) заработало!!! Таблица нормально показалась и вывела свое содержимое!! Ура, товарищи!
Объясните только, пожалуйста, в чем принципиальное отличие между TYPE и class? И тот и другой вроде возвращают Class<java.lang.Integer> |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Integer.TYPE - это примитив, int проще говоря. О том, что не стоит возвращать классы примитивов уже говорилось выше.
Integer.class - это класс объектной обертки int'a -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
ReFLeXive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
Понятно, спасибо за ответ! В будущем буду это учитывать
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |