Поєднання зручності візуального проектування та динамічного оновлення даних JTable

Поєднання зручності візуального проектування та динамічного оновлення даних JTable.

Проектування візуальних форм із застосуванням NetBeans IDE має безліч переваг над “ручним” кодуванням. Але іноді виникають ситуації коли доводиться шукати компроміс між гнучкістю “ручного” кодування та швидкістю і зручністю застосування IDE.

Ось приклад:

  • створюємо в NetBeans IDE форму (на приклад JFrame),
    • додаємо на форму компонет таблицю (JTable),
      • потім заповнюємо модель таблиці:
        • додаємо необхідну кількість колонок,
        • підписуємо заголовки,
        • встановлюємо ширину,
        • типи даних.
  • створюємо в NetBeans IDE форму (на приклад JFrame)

jframe

  • додаємо на форму компонет таблицю (JTable)

  • потім заповнюємо модель таблиці

  • додаємо необхідну кількість колонок

  • підписуємо заголовки

  • встановлюємо ширину

  • типи даних

В редакторі форм зробити це все можна швидко і просто, але якщо необхідно в процесі роботи програми поновити дані в таблиці тут виникають деякі питання. Застосовуючи “ручне” кодування ми б використовували для формування моделі масиви із назвами колонок та іншою необхідною інформацією, а для оновлення таблиці на основі цих масивів завжди можна сформувати нову модель даних DefaultTableModel tm = new DefaultTableModel(Object[][] data, Object[] columnNames).

У випадку створення форми в NetBeans IDE модель таблиці буде описана в процедурі initComponents() і масиви цієї моделі не іменовані. Доступ до них є але код, як на мене, надто громіздкий, не прозорий, а деякі масиви доводиться дублювати.

Тому я використовую наступні методи:

1.

...
// спорожнити таблицю (знищити тільки дані)
DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
tm.getDataVector().clear();
...

2.

...
// заповнити таблицю інформацією із бази даних
int cc = tm.getColumnCount();
while (rs.next()) {
  Object r[] = new Object[cc];
  for (int c = 0; c < rs.getMetaData().getColumnCount(); c++) {
    r[c] = rs.getString(c+1);
  }
  tm.addRow(r);
}
...

3.

// вставити запис і перейти до цього нового запису
...
tm.insertRow(0, new Object[сс]);
jTable1.setRowSelectionInterval(0, 0);
jScrollPane1.getVerticalScrollBar().setValue(0);
...

Це дає можливість поєднання зручності візуального проектування та динамічного оновлення даних.

=-=-=-=-=
Powered by Blogilo

Advertisements

Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: