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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> неправильно происходит редактир-е строки в JTable 
:(
    Опции темы
Adept
Дата 8.1.2005, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 2



Попал в новую яму smile уже с редактированием.
Второй раз строка в JTable нередактируется, т.е первый раз проходит все нормально, а если попытатся этуже строку отредактировать еще раз вылетает ошибка
Код

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at mobiltrade.MainFrame.buttonEdit_actionPerformed(MainFrame.java:452)
at mobiltrade.MainFrame.access$200(MainFrame.java:32)


Вот моя структура:
БД -> MobilTableModel -> SorterTableModel -> JTable

Вот тут выскакивает ошибка
Код

private void buttonEdit_actionPerformed(ActionEvent e) {
     ..........
     String sMobilIDEdit  = sorterTableModel.getValueAt(tablePrihod.getSelectedRow(), sorterTableModel.getColumnCount() - 1).toString(); //тут sMobilIDEdit становится равным null
     ..........      
}


Вот тут вызывается метод редактирования
Код

Object[] insertTable = new Object[5];
insertTable[0] = convertDateDBApp(valueData.getText());
insertTable[1] = valueModel.getSelectedItem();
insertTable[2] = valueImei.getText();
insertTable[3] = valueProdavec.getSelectedItem();
insertTable[4] = Integer.parseInt(valueCenaZakup.getText());
stm.EditRow(tableRowSelect,insertTable);
//где stm - это обьект SorterTableModel



Вот SorterTableModel

Код

public class SorterTableModel extends AbstractTableModel {
   private Row[] rows;
   private MobilTableModel model;
   int sortColumn;

   public SorterTableModel(MobilTableModel m) {
       model = m;
       rows = new Row[model.getRowCount()];
       for (int i = 0; i < rows.length; i++) {
           rows[i] = new Row();
           rows[i].index = i;
       }
   }
   public void sort(int c) {
       sortColumn = c;
       Arrays.sort(rows);
   }
   public Object getValueAt(int r, int c) {
       return model.getValueAt(rows[r].index, c);
   }
   public int getRowCount() {
       return model.getRowCount();
   }
   public int getColumnCount() {
       return model.getColumnCount();
   }
   public String getColumnName(int c) {
       return model.getColumnName(c);
   }
   private class Row implements Comparable {
       public int index;
       public int compareTo(Object other) {
           Row otherRow = (Row) other;
           Object a = model.getValueAt(index, sortColumn);
           Object b = model.getValueAt(otherRow.index, sortColumn);
           if (a instanceof Comparable) {
               return ((Comparable) a).compareTo(b);
           } else {
               return a.toString().compareTo(b.toString());
           }
       }
   }
   public void EditRow(int r,Object[] rowData){
      model.EditRow(rows[r].index,rowData);
      fireTableRowsUpdated(r,r);
      //fireTableDataChanged();
   }
}



Вот ModelTableModel
Код

public class MobilTableModel extends AbstractTableModel {
   int columnCount;
   ResultSetMetaData rsMetaData;
   String[] columnNameEng;
   Object[] row;
   String temp = "";
   Vector rows = new Vector();
   Connection conn;
   ResultSet rs;
   public MobilTableModel(Connection conn, ResultSet rs) {
       try {
           this.conn = conn;
           this.rs = rs;
           rsMetaData = rs.getMetaData();
           columnCount = rsMetaData.getColumnCount();
           columnNameEng = new String[columnCount];
           for (int i = 1; i < columnCount + 1; i++) {
                columnNameEng[i - 1] = rsMetaData.getColumnName(i).trim();
           }
           while (rs.next()) {
               row = new Object[columnCount];
               for (int y = 1; y < columnCount + 1; y++) {
                   String colType = rsMetaData.getColumnTypeName(y);
                   if (colType.equals("INTEGER")) {
                       row[y - 1] = new Integer(rs.getInt(y));
                   } else {
                       if (colType.equals("DATETIME")) {
                           row[y - 1] = rs.getDate(y);
                       } else {
                           row[y - 1] = rs.getString(y);
                       }
                   }
               }
               rows.addElement(row);
           }
       } catch (SQLException sqle2) {
       } catch (NullPointerException npe) {
       }

   }
   public int getRowCount() {
       return rows.size();
   }

   public int getColumnCount() {
       return columnCount;
   }
   public String getColumnName(int column) {
       return (columnNameEng[column]);
   }
   public Object[] getRow(int index) {
       return ((Object[]) rows.elementAt(index));
   }
   public Object getValueAt(int row, int column) {
       return ((Object[]) rows.elementAt(row))[column];
   }
   public void EditRow(int row, Object[] rowData){
       rows.setElementAt(rowData,row);
       fireTableRowsUpdated(row,row);
       //fireTableDataChanged();
   }

}




PM MAIL   Вверх
Domestic Cat
Дата 8.1.2005, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Цитата(Adept @ 8.1.2005, 05:39)
Второй раз строка в JTable нередактируется, т.е первый раз проходит все нормально, а если попытатся этуже строку отредактировать еще раз вылетает ошибка


То есть, подряд нажать кнопку редактирования?

Кстати проверяй, выделен ли ряд в таблице, иначе getSelectedRow вернет -1 и будет нехорошо.


--------------------

PM   Вверх
Adept
Дата 9.1.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 2



У меня по нажатию кнопки Edit выскакивает окно в котором я редактирую данные, там есть кнопка ок. После нажатия которой это окно закрывается и мы возвращаемся в главное окно, там где находится таблица(уже с изменениями).
Вот если уже отредактированную строку попробывать опять по кнопке Edit отредактировать, то при нажатии кнопки Edit окно редактирования непоявляется, а выскакивает эта ошибка.
Я так понимаю что тут неможет получить значение.
String sMobilIDEdit = sorterTableModel.getValueAt(tablePrihod.getSelectedRow(), sorterTableModel.getColumnCount() - 1).toString(); //второй раз вместо значения sMobilIDEdit = null

PM MAIL   Вверх
Adept
Дата 9.1.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 2



Проверку на выделение ряда я делаю.
Тут даже если написать так
Код

sMobilIDEdit = sorterTableModel.getValueAt(0,5).toString();
             

все равно ошибку выбрасывает


PM MAIL   Вверх
igon
Дата 9.1.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

Object[] insertTable = new Object[5];
insertTable[0] = convertDateDBApp(valueData.getText());
insertTable[1] = valueModel.getSelectedItem();
insertTable[2] = valueImei.getText();
insertTable[3] = valueProdavec.getSelectedItem();
insertTable[4] = Integer.parseInt(valueCenaZakup.getText());
stm.EditRow(tableRowSelect,insertTable);

Т.е. столбцов - 5, индекс последнего - 4. Вполне естественно, что
Код

getValueAt(0,5)

не сработает

Может, изначально у тебя 6 столбцов, а ты после редактирования делаешь их число равным 5 в редактированной строке?

Это сообщение отредактировал(а) igon - 9.1.2005, 17:30


--------------------
Хотите поговорить об этом?
PM   Вверх
Domestic Cat
Дата 9.1.2005, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172




Цитата(igon @ 9.1.2005, 08:28)
Т.е. столбцов - 5, индекс последнего - 4. Вполне естественно, что
Код

getValueAt(0,5)

не сработает

Там бедь стоит sorterTableModel.getColumnCount() - 1, должно работать.; а вот
Цитата(Adept @ 9.1.2005, 03:16)

sMobilIDEdit = sorterTableModel.getValueAt(0,5).toString();


даст ошибку.

Попробуй выводить значения всех параметров для sMobilIDEdit в консоль, посмотри чем они отличаются.


--------------------

PM   Вверх
igon
Дата 9.1.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sorterTableModel.getColumnCount(), возможно, возвращает 6.
Adept совершенно правильно (вручную) отнимает 1, получает 5 и ...получает ошибку smile


--------------------
Хотите поговорить об этом?
PM   Вверх
Domestic Cat
Дата 9.1.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Тут без него не выяснишь smile


--------------------

PM   Вверх
igon
Дата 10.1.2005, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А пока Adept отдыхает, у меня oftop предлжение - может, предложить вопрошающим (в рубрике "Прежде чем") постить минимальное приложение(2-3 урезанных донельзя классов), в которых, тем не менее, возникает волнующая их ошибка. Тогда мы могли бы просто пробежаться по нему debug'ом, особо не теряясь в догадках, как сейчас, например


--------------------
Хотите поговорить об этом?
PM   Вверх
Domestic Cat
Дата 10.1.2005, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



И кому будет охота урезать классы smile


--------------------

PM   Вверх
igon
Дата 10.1.2005, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тогда пусть ждут, пока догадаемся smile
Хотя декомпозиция - один из основных методов отладки сколько-нибудь сложных программ. И как можно без него обойтись - я, например, не представляю. Разве что постить вопрос после первой неудачной компиляции smile


--------------------
Хотите поговорить об этом?
PM   Вверх
Adept
Дата 10.1.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 2



В SorterTableModel у меня находится все 6 столбцов.
6-й столбец (mobil_id)
В JTable я вывожу 5 столбцов (все кроме 6-го)
................................все понял блин моя невнимательность
спасибо люди навели на ошибку smile
я недобавил значение последнего столбца
insertTable[5] = "0";

Добавлено @ 10:39
точнее не insertTable[5] = "0";
а insertTable[5] = "нужное значение";
Еще раз спасибо за помощь smile
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.0835 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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