JTable пример

JTable пример

Таблицы представлены классом JTable. Класс JTable соотвествует шаблону MVC, т.е. модель-вид-контроллер.

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

Таблицы широко используются для представления информации из баз данных. Для начала мы не будем касаться баз данных, сейчас просто научимся работать с JTable, а базы данных с привязкой к JTable рассмотрим на другом занятии.

Работать будем в среде Eclipse. Все, что мы будем делать легко воспроизводится и в NetBeans (вариант для NetBeans приводится ниже). И Eclipse, и NetBeans бесплатны.

Где взять Eclipse? Здесь: http://www.eclipse.org/platform. Java должна быть установлена до установки Eclipse.

Где взять NetBeans? Здесь: http://www.netbeans.org. Можно скачать Java, NetBeans, а можно Java и NetBeans вместе.

Вернемся к таблицам. Окрываем Eclipse SDK. В правом верхнем углу должна быть кнопка Java, как на рисунке. Если этого нет, тогда Window->Open Perspective->Java. JTable

Создадим проект: File->New->Java Project или File->New->Project… и в отрывшемся окне выбираем Java Project, жмём Next. В поле Project Name укажем MyTable, жмём Finish. Слева в виде Package Explorer получаем: JTable

Правой кнопкой по src, в откывшемся меню выбираем New->Package. Имя пакета в поле Name установим myTable.table. Получаем: JTable

Правой кнопкой по пакету myTable.table, выбираем New->Class, в поле Name вводим TableEx и ниже установим флаг public static void main(String[] args), жмём Finish. В окне редактора видим код нашего класса и в виде Package Explorer появился узел класса TableEx.java.

Вводим код:

Здесь мы создали объект JTable и поместили его в JScrollPane, последний нужен для того, чтобы ячейки таблицы можно было прокручивать. Если сейчас запустить это приложение, то увидим пустое окно. А где же наша таблица? Чтоб её увидеть надо внести в неё какие-то данные.

Мы уже знаем – данные храняться не в таблице, а в её модели данных. Создадим класс модели данных TableExModel как расширение абстрактного класса AbstractTableModel, который реализует, но не все, методы интерфейса TableModel, который, в свою очередь, описывает модель данных. Любой класс, представляющий модель данных для JTable, должен либо непосредственно реализовывать интерфейс TableModel, либо быть наследником другого класса, который реализует TableModel. Здесь надо заметить, что есть ещё две модели данных для JTable и наш класс мог бы представлять их, следовательно не восходить к интерфейсу TableModel, но мы не будем рассматривать эти случаи.

Базовый пример

Мы создали класс TableExModel, переопределили в нем методы getColumnCount, getRowCount, getValueAt и getColumnName. Первые три метода обязательно переопределяются, т.к. родительский класс абстрактный. Последний метод getColumnName переопределяем, чтоб отображать заголовки столбцов. Заголовки столбцов храняться в векторе columnNames, а данные – в векторе tableData.

В классе TableEx создали поле:

private TableExModel model;

и внесли изменения в конструктор:

model = new TableExModel();
table = new JTable(model);

Правой кнопкой кликаем по узлу TableEx.java в виде Package Explorer, в открывшемся меню Run as->Java Application, в отрывшемся окне выбираем TableEx.java и жмём OK и получаем: JTable

Пример в Eclipse завершен.

Теперь то же самое в NetBeans (Java + NetBeans). Выбираем File->New Project->General->Java Application. Жмём Next, в поле Project Name вводим MyTable и жмём Finish. Получаем: JTable

Правой кнопкой по Source Package->New->Java Package, в поле Package Name вводим myTable.table. JTable

Правой кнопкой по myTable.table->New->JFrame Form, в поле Class Name вводим TableEx. Жмём Finish. Правой кнопкой по открывшейся форме, Set Layout->BorderLayout.

Нажав на кнопку Source в окне редактора, перейдём к редакции кода. Вставим класс TableExModel из предыдущего примера, введем поле:

private TableExModel model;

и поле

private JTable table;

а в конструкторе класса TableEx пять строк:

Получаем:

Запускаем на выполнение и получаем результат ровно такой же, как в примере для Eclipse. Пример в NetBeans завершен.