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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Принудительное обновление JTable 
:(
    Опции темы
Valor
Дата 14.1.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток всем.

На главном окне программы лежит JTable  у него есть самописная AbstractTableModel модель которая подгружает из БД (постранично, т.е. по 250 строк) определенный набор данных (из 30 полей в таблице БД, пользователю выводится 4, т.е. у таблицы 4 колонки)..  Добавление новых записей происходит из другого окна (JDialog), причем добавление происходит во все 30 полей таблицы, минус primary key A_I. Так вот подскажите пожалуйста как реализовать обновление данных таблицы после добавления данных, если данные добавляются в обход модели таблицы.. ? Проще говоря нужно сделать что-то вроде reload()  метод в модели данных таблицы который бы и перезагружал основной вектор содержащий строки из бд..  вот только как понять не могу.   

Сильно не пинайте, МФК заставил админа заниматься разработкой софта smile 


Это сообщение отредактировал(а) Valor - 14.1.2009, 08:46
PM MAIL   Вверх
jManiak
Дата 14.1.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ИМХО проще сделать отдельной процедурой обновление данных, и вставлять ее в нужные места, например сразу после добавления данных в таблицу.

тем более что в коде все равное нужно будет делать table.updateUI();

Это сообщение отредактировал(а) jManiak - 14.1.2009, 09:19
PM MAIL ICQ   Вверх
Valor
  Дата 15.1.2009, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Изменю вопрос чтоб треды не плодить..

Есть модель 

Код

public class ViewPredoplataTableModel extends AbstractTableModel {

    String TableHeaderName[] = new String[]{"1","2","3,"4","5","6"};
    MessageBox msbx = new MessageBox();
    Connection conn = null;
    Statement st = null;
    //PreparedStatement pst = null;
    ResultSet rs = null;
    ResultSetMetaData rsmd = null;
    String TableName;
    int CollCount = 0;
    String dbCellNames[]; //name cel from data base
    Vector Alldata_row = new Vector();
    Vector Alldata_cell = new Vector();
    Vector row;

    public ViewPredoplataTableModel() {
        try{
        Vector newData;
        conn = MySQLFactory.getConnection();
        st = (Statement) conn.createStatement();
        rs = st.executeQuery("SELECT DISTINCT `predoplata`.`articles`, `dic_company`.`company`,"
                              + "`dic_company`.`company_a`,`predoplata`.`doc_num`,`predoplata`.`doc_date`,"
                              + "`dir_sezons`.`sezons` FROM `predoplata`"
                              + "Left Join `dic_company` ON `dic_company`.`id_company` = `predoplata`.`dir_company_name`"
                              + "Left Join `dir_sezons` ON `predoplata`.`sezon` = `dir_sezons`.`id_sezons`"
                              + "ORDER BY `predoplata`.`id_predoplata` DESC");
        rsmd = (ResultSetMetaData) rs.getMetaData();
        TableName = rsmd.getTableName(1);
        CollCount = rsmd.getColumnCount();
        dbCellNames = new String[CollCount];
        System.out.println(CollCount);
        for (int x = 0; x < CollCount; x ++){
            dbCellNames[x] = TableHeaderName[x];// rsmd.getColumnName( x +1);
        }
            while(rs.next()){
                newData = new Vector();
                for(int q = 1; q <= CollCount; q ++){
                    newData.addElement(rs.getString(q));
                }
                Alldata_row.addElement(newData);
            }
        }catch(Exception ex){

            msbx.showErrrorMessage(ex.getMessage(), "Error!");
        }finally{
            try{
                rs.close();
                st.close();
                conn.close();
            }catch(Exception ex){
                System.out.println(ex.getMessage());
                msbx.showErrrorMessage(ex.getLocalizedMessage(), "Error!");
            }
        }
    }

    @Override
    public String getColumnName(int col){
        return dbCellNames[col];
    }

    public boolean isCellEditable(){
        return false;
    }

    public int getColumnCount() {
      return CollCount;
    }

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

    public Object getValueAt(int rowIndex, int columnIndex) {
        row = (Vector) Alldata_row.elementAt(rowIndex);
        return row.elementAt(columnIndex);
    }

    @Override
    @SuppressWarnings("unchecked")
    public void setValueAt(Object value, int row, int coll){
        Vector DataRow = (Vector) Alldata_row.elementAt(row);
        DataRow.setElementAt(value, coll);
        fireTableDataChanged();
    }

    public void deleteRow(int rowIndex){
        Alldata_row.removeElementAt(rowIndex);
        fireTableRowsDeleted(rowIndex, rowIndex);
    }


}


есть кнопка, нажатие которой должно удалять выделенную строку из БД

Код

private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        Connection conn = null;
        PreparedStatement ps = null;
        ViewPredoplataTableModel votm = new ViewPredoplataTableModel();
        String selectedValue = (String) jTable2.getModel().getValueAt(jTable2.getSelectedRow(), 0);
        
        try{
            conn = MySQLFactory.getConnection();
            ps = (PreparedStatement) conn.prepareStatement("DELETE FROM `predoplata` WHERE `articles`=?");
            ps.setString(1, selectedValue);
            ps.executeUpdate();
            votm.deleteRow(jTable2.getSelectedRow());
            jTable2.repaint();
            msbx.showInformationMessage("Запись " + selectedValue +" удалена","!");
        }catch(Exception ex){
            msbx.showErrrorMessage(ex.getMessage(), "1error");
        }finally{
            try{
                ps.close();
                conn.close();
            }catch(Exception ex){
                msbx.showErrrorMessage(ex.getMessage(), "2Error");
            }
        }
        
    }


Даннве из бд удаляются но таблица не отображает изменения (не перезагружается).. 
Подозреваю что косяк в методе 

Код

        public void deleteRow(int rowIndex){
            Alldata_row.removeElementAt(rowIndex);
            fireTableRowsDeleted(rowIndex, rowIndex);
    }



подскажите в чем трабла, если можно на пальцах.. smile 
PM MAIL   Вверх
math64
Дата 15.1.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 72



Нужно в обработчике использовать оригинальную модель, а не создавать новый экземпляр:
Код

ViewPredoplataTableModel votm = (ViewPredoplataTableModel)jTable2.getModel();

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



Код

String query = "SELECT id, code, name, cena, cena1, type, vmenu FROM bliuda ORDER BY type, code";
DB.SqlReload(query);
jTable.repaint();

Пример. DB - класс database. "Перезагружаешь" модель таблицы. И переписываешь саму таблицу.

Это сообщение отредактировал(а) skif18 - 20.1.2009, 09:36


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

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


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

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