Групування колонок JTable.

Дуже цінний ресурс зразків коду пожна знайти на сайті http://www.java2s.com/

Є диний недолік більшості текстів @version 1.1 01/15/99.

Сам по собі це не недолік, але деякі приклади не працюють в більш пізніх версіях Java VM.

Доволі часто для реалізації програми використовується компонент таблиці.

В NetBeans IDE 7.0 серед Swing Control є JTable,

але іноді виникає необхідність розширення його функціональності.

На сторінці http://www.java2s.com/Code/Java/Swing-Components/GroupableGroupHeaderExample.htm

можна знайти зразок такого удосконалення.

Незважаючи на те, що в коді помилок не знайдено. Компонент не працює із Java VM 1.6.

Код компілюється і виконується без помилок, але групуючі колонки, як на скріншоті, не відображаються.

Проблема вирішується просто.

Частину коду:

JTable table = new JTable(dm) {
  protected JTableHeader createDefaultTableHeader() {
    return new GroupableTableHeader(columnModel);
  }
};

Необхідно замінити на:

JTable table = new JTable(dm);
JTableHeader th = new GroupableTableHeader(table.getColumnModel());
table.setTableHeader(th);

Класи ColumnGroup.java, GroupableTableHeader.java, GroupableTableHeaderUI.java добросовісно скопійовані із java2s.

Повністю текст із класу GroupableHeaderExample змінений для використання у проекті NetBeans має наступний вигляд:

public MainForm() {

  initComponents(); // додає редактор форм

  // далі додаємо частину коду із GroupableHeaderExample для використання удосконаленої таблички

  // таблиця з ієрархічним заголовком - GroupableTableHeader
  DefaultTableModel dm = new DefaultTableModel();
  dm.setDataVector(new Object[][]{
        {"1", "2", "3", "4", "5", "6"},
        {"7", "8", "9", "10", "11", "12"}},
    new Object[]{"№", "с1", "с2", "с3", "с4", "с5"});
  //
  /* це не працює
    JTable table = new JTable(dm) {
      protected JTableHeader createDefaultTableHeader() {
        return new GroupableTableHeader(columnModel);
      }
    };
   */
  // все дуже просто :)
  JTable table = new JTable(dm);
  JTableHeader th = new GroupableTableHeader(table.getColumnModel());
  table.setTableHeader(th);
  //
  table.getColumnModel().setColumnMargin(0);
  TableColumnModel cm = table.getColumnModel();
  // додати групуючі заголовки
  CColumnGroup g1 = new ColumnGroup("G1");
  g1.add(cm.getColumn(1));
  g1.add(cm.getColumn(2));
  ColumnGroup g2 = new ColumnGroup("G2");
  g2.add(cm.getColumn(3));
  ColumnGroup g3 = new ColumnGroup("G3");
  g3.add(cm.getColumn(4));
  g3.add(cm.getColumn(5));
  g2.add(g3);
  GroupableTableHeader header = (GroupableTableHeader) table.getTableHeader();
  header.addColumnGroup(g1);
  header.addColumnGroup(g2);
  // у візуальному редакторі на форму додаємо тільки JScrollPane
  jScrollPane1.setViewportView(table);
}

В результаті отримуємо табличку, яку так люблять користувачі.

=-=-=-=-=
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 блогерам подобається це: