Читаем 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.

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

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

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

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

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