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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Jtable refresh 
:(
    Опции темы
crazyyy
Дата 13.4.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Допоможіть реалізувати.... Коли я вношу дані в Jtable щоб він обновлявся. А то він гад після компіляції обновляється. IDE ECLIPSE
Код

public void populateSubCategories(String host,String login,String pass, String strSQL){
        Vector columnNames=new Vector();
        Vector data=new Vector();
        Connection con = null;
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://"+host+":3306/dmtk", login, pass);
            if(!con.isClosed()){
                Statement stmt=con.createStatement();
                ResultSet rs=stmt.executeQuery(strSQL);
                ResultSetMetaData md=rs.getMetaData();
                int columns=md.getColumnCount();
                for (int i=1;i<=columns;i++){
                    columnNames.addElement(md.getColumnName(i));
                }
                
                while(rs.next()){
                    System.out.println("records found..." + strSQL);
                    Vector row=new Vector(columns);
                    for(int i=1;i<=columns;i++){
                        row.addElement(rs.getObject(i));
                    }
                    data.addElement(row);
                }
                rs.close();
                stmt.close();
                table=new JTable(data,columnNames);
            }
  
  
        } catch(Exception e) {
            System.err.println("Exception: " + e);
        } finally {
            try {
                if(con != null)
                    con.close();
            } catch(SQLException e) {}
        }
  
    }

вот и кнопка 
Код

    add.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                insert(host, root, pass, cpe, nazva, godunu, module, praktuchni, laboratorni, camoctijne, temu, temu2);

                
populateSubCategories(host,root,pass,"select * from predmetu");
            }
        });
        
        
    }


Дякую за допомогу))))

PM MAIL Skype   Вверх
powerOn
Дата 13.4.2010, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Модератор: Пожалуйста, используйте русский или английский язык. 


--------------------
user posted image нет времени думать - нужно писать КОД!

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


Новичок



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

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



Хорошо
PM MAIL Skype   Вверх
Christoph
Дата 14.4.2010, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



чтоб обновить таблицу
Код

tableObj.repaint;


если хочешь менять данные в таблице динамически, то тебе надо использовать TableModel
Вот мой код с программы

Код

private void setTableModel() throws SQLException {
        table.setModel(new AbstractTableModel() {

            private String[] columnNames = db.retrieveHeader(DBClient.selItemChild,DBClient.selItemParent);
            private Object[][] data = db.retrieveData(DBClient.selItemChild,selItemParent);

            public int getRowCount() {
                return data.length;
            }

            public int getColumnCount() {
                return columnNames.length;
            }

            public String getColumnName(int columnIndex) {
                return columnNames[columnIndex];
            }

            public Object getValueAt(int rowIndex, int columnIndex) {
                return data[rowIndex][columnIndex];
            }
        });


я динамически менял значения columnNames и data и затем вызывал repaint


--------------------
user posted image
PM MAIL ICQ   Вверх
crazyyy
Дата 14.4.2010, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот моя модель даних. 
Код


import javax.swing.*;
import javax.swing.table.*;
import java.sql.*;
import java.util.*;

public class DatabaseTableModel 
    extends AbstractTableModel {
    // здесь мы будем хранить названия столбцов
    private ArrayList columnNames = new ArrayList();
    // список типов столбцов
    private ArrayList columnTypes = new ArrayList();
    // хранилище для полученных данных из базы данных
    private ArrayList data = new ArrayList();
    
    // конструктор позволяет задать возможность редактирования
    public DatabaseTableModel(boolean editable) {
        this.editable = editable;
    }
    private boolean editable;
    
    //------------------------------------
    
    //------------------------------------
    
    // количество строк
    
    public int getRowCount() {
        synchronized (data) {
            return data.size();
        }
    }
    // количество столбцов
    public int getColumnCount() {
        return columnNames.size();
    }
    // тип данных столбца
    public Class getColumnClass(int column) {
        return (Class)columnTypes.get(column);
    }
    // название столбца
    public String getColumnName(int column) {
        return (String)columnNames.get(column);
    }
    // данные в ячейке
    public Object getValueAt(int row, int column) {
        synchronized (data) {
            return ((ArrayList)data.get(row)).get(column);
        }
    }
    // возможность редактирования
    public boolean isEditable(int row, int column) {
        return editable;
    }
    // замена значения ячейки
    public void setValueAt(
     Object value, int row, int column){
        synchronized (data) {
            ((ArrayList)data.get(row)).set(column, value);
        }
    }
    // получение данных из объекта ResultSet
    public void setDataSource(
     ResultSet rs) throws Exception {
        // удаляем прежние данные
        data.clear();
        columnNames.clear();
        columnTypes.clear();
        // получаем вспомогательную информацию о столбцах
        ResultSetMetaData rsmd = rs.getMetaData();
        int columnCount = rsmd.getColumnCount();
        for ( int i=0; i<columnCount; i++) {
            // название столбца
            columnNames.add(rsmd.getColumnName(i+1));
            // тип столбца
            Class type =
                Class.forName(rsmd.getColumnClassName(i+1));
            columnTypes.add(type);
        }
        // сообщаем об изменениях в структуре данных
        fireTableStructureChanged();
        // получаем данные
        while ( rs.next() ) {
            // здесь будем хранить ячейки одной строки
            ArrayList row = new ArrayList();
            for ( int i=0; i<columnCount; i++) {
                if (columnTypes.get(i) == String.class)
                    row.add(rs.getString(i+1));
                else
                    row.add(rs.getObject(i+1));
            }
            synchronized (data) {
                data.add(row);
                // сообщаем о прибавлении строки
                fireTableRowsInserted(
                    data.size()-1, data.size()-1);
            }
        }
    }
}


Коли я запускатаю фрейм , виконую такий код
Код

try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con1 = DriverManager.getConnection("jdbc:mysql://"+ho+":3306/dmtk", lo, pa);
            if(!con1.isClosed()){
                 stmt=con1.createStatement();
                 rs=stmt.executeQuery("select * from predmetu");
                 obb = new DatabaseTableModel(true);
                obb.setDataSource(rs);
                table = new JTable(obb);
            }
  
        } catch(Exception e) {
            System.err.println("Exception: " + e);
        } finally {
            try {
                if(con1 != null)
                    con1.close();
            } catch(SQLException e) {}
        }
        
        panel1.add(table)


А вже коли при на натиснеті на кнопку, воно в базу даних додоє, але Jtable не обновляється.а ЯКШО обновить то ніятих значень немає в таблиці
Код

insert(host, root, pass, cpe, nazva, godunu, module, praktuchni, laboratorni, camoctijne, temu, temu2);
                try{
                    stmt=con1.createStatement();
                         rs=stmt.executeQuery("select * from predmetu");
                         obb = new DatabaseTableModel(true);    
                }catch (Exception e1) {

                }
                        try {
                            obb.setDataSource(rs);
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                        table = new JTable(obb);
          table.repaint();
    
            }
        });

Народ допоможіть!

PM MAIL Skype   Вверх
Christoph
Дата 14.4.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



тебе не нужно создавать все время таблицу создавать, меняй только модель
Код

table.setModel(...);


columnNames 
data
в этих контейнерах есть что то?

Это сообщение отредактировал(а) Christoph - 14.4.2010, 18:13


--------------------
user posted image
PM MAIL ICQ   Вверх
crazyyy
Дата 14.4.2010, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



так є , я  в базу пробував в ручку дані заносити. через консоль SQL
PM MAIL Skype   Вверх
crazyyy
  Дата 14.4.2010, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибі все пішло
Код

table.setModel(...);



PM MAIL Skype   Вверх
Christoph
Дата 14.4.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пожалуйста smile


--------------------
user posted image
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.0889 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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