Розробники JTable створили його по парадигмі «модель-вид-контролер». Іншими словами, це розділило JTable на частини таким чином, що одна відповідає за способи відображення інформації, інша за зовнішній вигляд, третя за отримання даних. Не будемо заглиблюватися в подробиці, кому цікаво, можете пошукати в мережі. Наше завдання розібратися на прикладах, як організувати висновок даних з будь-якої структури в таблицю. За це відповідає модель таблиці.
Найпростіший спосіб створення JTable - масив. Конструктору передається масив назв стовпців і масив значень. Все інше таблиця робить сама. Наведу приклад.
Дякую за пояснення, дуже дохідливо.
Єдине до чого довго не міг додуматися - від куди набираються дані в методі getValueAt (), класу MyTableModel. Потім зрозумів, що там проходить ітерація і значеннями виступають номера стлбцов і рядків.
Додам свої «5 копійок» в правку уроку (на більше не тягне), напевно новачкам нерви заощадить.
У цьому паттерне використовується змінна «tModel», яку не було визнано до конструктора.
// Створимо список з сутностей класу Human
humans = new ArrayList ();
humans.add (new Human ( "John", "Smith", "1231231"));
humans.add (new Human ( "George", "White", "321321312"));
humans.add (new Human ( "Olga", "Bregneva", "7171711"));
// Створимо модель таблиці
tModel = new MyTableModel (humans);
// На основі моделі, створимо нову JTable
jTabPeople = new JTable (tModel);
Оголосити змінну потрібно до конструктора:
public class JTableExample MyTableModel tModel;
// Конструктор
>
В принципі, коли писав про це не замислювався. Так як я не скинув готову програму, а просто написав статтю. Думаю, логічно, якщо змінна не оголошена - її потрібно оголосити :).
Наполовину запрацювало!
Поясніть будь ласка терміново хтось, як правильно вставити (де змінити) ось цей шматок:
/ * Додамо поле humans в нашу модель,
а так само змінимо конструктор моделі: * / ArrayList
MyTableModel (ArrayList
this.humans = humans;
>
Розумію, що потрібно так вставляти:
public class MyTableModel extends AbstractTableModel
MyTableModel (ArrayList
this.humans = humans;
>
...
Але дає помилку The constructor MyTableModel () is undefined