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

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

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

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

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

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

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

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

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

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

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