Читаем Java 7 полностью

□ Конструктор JTable (Object[] [] data, Object[] colNames) создает таблицу, заполненную объектами data. Параметр colNames содержит имена столбцов таблицы. Все строки массива data должны содержать столько же элементов, сколько существует в массиве colNames. Пример создания таблицы этим конструктором приведен в листинге 13.1.

□ Конструктор JTable (Vector data, Vector colNames) делает то же самое, но параметры заданы векторами. Пример его использования представлен в листинге 13.3.

Надо заметить, что заголовки столбцов автоматически появляются на экране, только

если таблица заключена в панель JScrollPane. Если при этом у столбцов не заданы имена, то они помечаются буквами A, B, C и т. д., как принято в электронных таблицах.

Остальные конструкторы определяют таблицу с заранее заданными моделями данных.

□ Конструктор JTable (TableModel) использует заданную параметром модель ячеек таблицы. Модель столбцов и модель выделения данных определяются по умолчанию.

□ Конструктор JTable (TableModel, TableColumnModel) оставляет модель выделения данных по умолчанию.

□ Конструктор JTable (TableModel, TableColumnModel, ListSelectionModel) задает все три модели данных.

Листинг 13.1 показывает простой пример определения таблицы с помощью массива

объектов, в данном случае — строк.

Листинг 13.1. Простое определение таблицы

import java.awt.*; import javax.swing.*;

public class SimpTable extends JFrame{

SimpTable(){

super(" My Table"); setLayout(new FlowLayout());

String[][] data = {{"-27", "32"}, {"-45", "55"}}; String[] colNames = {"Вчера", "Сегодня"};

JTable t1 = new JTable(data, colNames);

add(new JScrollPane(t1)); setSize(400, 400);

setDefaultCloseOperation(EXIT ON CLOSE); setVisible(true);

}

public static void main(String[] args){ new SimpTable();

}

}

Таблицу можно заполнить методом

setValueAt(Object data, int row, int column);

Он заменяет старое содержимое ячейки (row, column) Вида объектом data. Следует учесть, что в этом методе параметр column указывает номер столбца в Виде, но не в Модели данных. При выводе содержимого таблицы из Модели данных в Вид порядок столбцов можно изменить, да и необязательно выводить все столбцы таблицы.

В таблице можно задать или заменить Модель ячеек таблицы методом setModel (TableModel) и модель столбцов таблицы с помощью метода setColumnModel(TableColumnModel). Рассмотрим их подробнее.

Модель данных таблицы

Таблица класса JTable пользуется тремя моделями данных для хранения своих элементов. Две модели, описанные интерфейсами TableModel и TableColumnModel, специфичны для таблиц, третья модель — ListSelectionModel — заимствована у списков JList. Она уже рассматривалась нами в главе 11.

Модель ячеек таблицы

Модель хранения содержимого ячеек таблицы описана интерфейсом TableModel, который частично реализован абстрактным классом AbstractTableModel и полностью реализован его подклассом DefaultTableModel.

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

Строки и столбцы пронумерованы, начиная от нуля. Общий суперкласс всех ячеек столбца с индексом ind можно получить методом getColumnClass(int ind). Текущее число строк в таблице можно узнать методом getRowCount ( ), число столбцов- методом

getColumnCount (). У столбца может быть имя, получить которое можно методом getColumnName (int), возвращающим строку класса String.

Содержимое ячейки таблицы можно получить из модели данных в виде объекта класса Object методом getValueAt (int rowInd, int colInd), а установить в модель, если ячейка

редактируема, — методом setValueAt(Object data, int rowInd, int colInd).

Проверить, редактируема ячейка или нет, можно логическим методом

isCellEditable(int rowInd, int colInd).

Легко создать свою модель ячеек таблицы, расширив класс AbstractTableModel. При этом необходимо определить три метода:

int getRowCount(); int getColumnCount();

Object getValueAt(int, int);

Остальные методы переопределяются по усмотрению разработчика. Но если этого не сделать, то получится нередактируемая таблица только для чтения, поскольку методisEditable () в классе AbstractTableModel возвращает false, а метод setValueAt () пуст. Для того чтобы таблица стала редактируемой, надо переопределить и эти два метода.В листинге 13.2 приведен пример расширения класса AbstractTableModel — модель ячеек таблицы, запрещающая редактировать первый столбец таблицы.Листинг 13.2. Модель запрещает редактировать первый столбец

import java.awt.*; import javax.swing.*; import javax.swing.table.*;

public class SimpTable extends JFrame{

SimpTable(){

super(" Таблица с неизменяемым первым столбцом"); setLayout(new FlowLayout());

JTable t1 = new JTable(new FirstColumnTableModel());

add(new JScrollPane(t1));

setSize(400, 400);

setDefaultCloseOperation(JFrame.EXIT ON CLOSE); setVisible(true);

}

public static void main(String[] args){ new SimpTable();

}

}

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных