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

Vector col = new Vector(); col.addElement("Фамилия"); col.addElement("Год рождения"); col.addElement("Семейное положение");

JTable t2 = new JTable(data, col);

JTableHeader th = t2.getTableHeader(); add(th, BorderLayout.NORTH); add(t2, BorderLayout.CENTER);

setSize(400, 400);

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

}

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

}

}

На рис. 13.2 показан вывод программы, записанной в листинге 13.4. Как видно из рисунка, объект класса Boolean отображен строкой — результатом действия метода

toString().


Рис. 13.2. Отдельный вывод заголовка таблицы

Границы между заголовками столбцов служат для изменения ширины столбца с помощью мыши. Изменение может быть сделано в пределах от минимальной до максимальной ширины. Поведение остальных столбцов при изменении ширины одного из них регулируется методом setAutoResizeMode(int) класса JTable. Аргумент этого метода — одна из следующих констант:

□ auto_resize_off — не изменять ширину остальных столбцов;

□ auto_resize_next_column — изменить ширину следующего столбца;

□ auto_resize_subsequent_columns — изменить пропорционально ширину следующих столбцов (по умолчанию);

□ auto_resize_last_column — изменить ширину последнего столбца;

□ auto_resize_all_columns — изменить пропорционально ширину всех столбцов.

Модель выделения ячеек

Правила выделения ячеек таблицы регулируются интерфейсом ListSelectionModel. В классе JTable по умолчанию используется реализация DefaultListSelectionModel этого интерфейса. Она была описана в главе 11 при рассмотрении класса JList. Эта модель задает три режима выделения: выделение отдельного элемента single_selection, выделение смежных элементов single_interval_selection, выделение нескольких участков смежных элементов multiple_interval_selection.

Режим выделения можно установить непосредственно методами модели выделения или методом setSelectionMode (int) класса JTable, в котором надо задать одну из трех указанных ранее констант. Первый способ позволяет установить разные режимы выделения для строк и столбцов таблицы. Для строк режим выделения можно задать просто методом setSelectionModel (ListSelectionModel) класса JTable. Чтобы задать режим выделения столбцов, надо предварительно получить ссылку на объект типа TableColumnModel, а потом установить новую модель. Все это можно сделать так:

table.getColumnModel().setSelectionModel(new SomeSelectionModel());

Цвет текста и фона выделенных ячеек можно задать методами

setSelectionForeground(Color) и setSelectionBackground(Color).

Остальные свойства выделения можно задать и узнать методами модели выделения, получив ссылку на нее методом getSelectionModel ( ) класса JTable.

Визуализация ячеек таблицы

Непосредственным выводом содержимого ячеек на экран — его визуализацией — занимается еще один делегат класса JTable, описанный интерфейсом TableCellRenderer.

Интерфейс TableCellRenderer описывает всего один метод:

Component getTableCellRendererComponent(

JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col);

Как видно из описания, для каждой ячейки с индексами (row, col) можно задать свой способ визуализации. Этот способ может также меняться в зависимости от содержимого value ячейки, от того, выделена ли ячейка isSelected, имеет ли она фокус ввода hasFocus, и даже от того, какая таблица table использует этот метод. По этим данным метод должен сформировать компонент, содержащий значение value, и вернуть его. Обычно возвращается объект класса, определяющего этот метод, т. е. this. Затем полученный объект рисует себя на экране своим методом paint (). Поэтому удобно реализовать интерфейс каким-нибудь графическим компонентом, имеющим метод paint ().

Все это похоже на визуализацию элементов списка JList, описанную в главе 11.

В библиотеке Swing интерфейс TableCellRenderer реализован классом

DefaultTableCellRenderer, расширяющим класс JLabel. Но класс DefaultTableCellRenderer не реализует даже все возможности класса JLabel, например не отображаются изображения типа Icon. Используется только метод setText(String) класса JLabel в таком виде:

protected void setValue(Object value){

setText((value == null) ? "" : value.toString());

}

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

Для того чтобы показать графические объекты, хранящиеся в ячейках таблицы, в графическом виде, чаще всего достаточно переопределить метод setValue(Object) класса DefaultTableCellRenderer. Например, в программе листинга 13.2 объекты класса Color выводятся текстовой строкой, как видно на рис. 13.1. Чтобы в ячейке показать цвет, надо расширить класс DefaultTableCellRenderer, переопределив его метод setValue ( ):

class ColorRenderer extends DefaultTableCellRenderer{ public void setValue(Object value){

setBackground((Color)value);

}

}

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

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

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