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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTable как грамотно заполнить 
V
    Опции темы
Ak47black
  Дата 17.4.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Здравствуйте.
Использую NetBeans.
Положил на форму jTable и хочу заполнить данными из базы данных (таблица из 2 колонок)
есть вот такой код
Код

        try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT name, surname FROM staff");

            while (rs.next()) {
                //тут заполнятем в jTable по одной сточке при каждой и итерации из rs.getString(1), rs.getString(2)
            }
            rs.close();
            st.close();
        }
        catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }

Подскажите пожалуйста, как правильно реализовать
Цитата

//тут заполнятем в jTable по одной сточке при каждой и итерации из rs.getString(1), rs.getString(2)

Желательно без всяких "грамозких" кодов  smile 
PM MAIL   Вверх
Christoph
Дата 17.4.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот код с моей программы:

Код

 public void retrieveAllBases() throws SQLException
       {
           rootDataBase = new TreeItem("Bases");
           int i=1;
           srs = st.executeQuery("show databases") ;
            while (srs.next())
           {
               rootDataBase.children.add(new TreeItem(srs.getString(i)));
           }
       }

 public Object[][] retrieveData(TreeItem tableName,TreeItem baseName) throws SQLException
       {
           st.executeQuery("use "+baseName.toString());
          srs   = st.executeQuery("SELECT * FROM "+tableName.toString()) ;
          Object[][] data = new Object[100][100];
          ResultSetMetaData rsmd = srs.getMetaData();
          
           int numRow=0;
          while (srs.next())
          {
              for (int columnIndex=1; columnIndex <= rsmd.getColumnCount(); columnIndex++)
              {
                  data[numRow][columnIndex-1] = srs.getString(columnIndex);
              }
                  numRow++;
          }
                return data;
       }


в эти методы передается объекты из дерева, но это не важно, в первом методе я получаю, массив заголовков таблицы, второй метод записывает в массив data все данные в двухмерный массив, чтоб потом можно было менять динамически содержимое таблицы, надо использовать, TableModel, если у тебя будет одна таблица то в конструктор, надо передать два массива (заголовки, и данные)

Вот простая 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];
            }
        });



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


Эксперт
****


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

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



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

setValueAt

?

Тоесть например после выполнения запроса изменить количество строк, а потом просто пройтись по всем с setValueAt.

Это сообщение отредактировал(а) Ak47black - 17.4.2010, 13:30
PM MAIL   Вверх
Ak47black
Дата 17.4.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Christoph, 
А вы знаете я только что нашел вот такое решение 
Код

((DefaultTableModel)jTable.getModel()).addRow( new Object[]{rs.getString(1), rs.getString(2)} );

Проблема решена.

Это сообщение отредактировал(а) Ak47black - 17.4.2010, 13:47
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.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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