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

class FirstColumnTableModel extends AbstractTableModel{ protected Obj ect[][] data = {

{"Текст", Color.black, new Boolean(true)},

{"Фон", new Color(130, 56, 187), new Boolean(true)},

{"Рамка", new Color(200, 45, 125), new Boolean(false)},

};

protected String[] colNames = {"Элемент", "Цвет", "Выбрать"};

public FirstColumnTableModel(){ super(); }

// Определяем обязательные методы

public int getRowCount(){ return data.length; }

public int getColumnCount(){ return data[0].length; }

public Object getValueAt(int row, int col){ return data[row][col]; }

// Запрещаем заполнять ячейки первого столбца public void setValueAt(Object value, int row, int col){ if (col != 0) data[row][col] = value;

// Сообщаем, что первый столбец нельзя редактировать public boolean isCellEditable(int row, int col){ return col != 0;

}

// Для визуализации содержимого ячеек графическим // компонентом определяем класс ячеек столбца public Class getColumnClass(int col){ return data[0][col].getClass();

}

// Для показа имен в строке заголовков public String getColumnName(int col){ return colNames[col];

}

}

Как видно из рис. 13.1, объект класса Boolean показан В таблице компонентом JCheckBox. Это результат действия метода getColumnClass (). На рис. 13.2 тот же объект изображен в стандартном виде. Но объект класса Color по-прежнему показан строкой — результатом действия метода toString ( ).

Рис. 13.1. Таблица со сложными объектами

Класс DefaultTableModel кроме реализации методов интерфейса TableModel добавляет несколько конструкторов и полезных методов работы с моделью данных. Он создает редактируемую модель ячеек таблицы. Для хранения данных он создает вектор строк класса Vector, хранящий строки опять-таки в виде вектора. Получившийся вектор векторов хранится в защищенном (protected) поле dataVector.

Конструктор по умолчанию DefaultTableModel () создает объект с нулевым количеством строк и столбцов.

Конструктор DefaultTableModel (int rowCount, int colCount) создает модель данных с заданным числом строк и столбцов. В ячейках этой модели — пустые ссылки null.

Конструкторы

DefaultTableModel(Vector data, Vector colNames);

DefaultTableModel(Object[][] data, Object[] colNames);

сразу же заполняют модель данными.

Еще два конструктора

DefaultTableModel(Vector colNames, int rowCount);

DefaultTableModel(Obj ect[] colNames, int rowNames);

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

Методы класса DefaultTableModel, как и положено модели данных, добавляют в конец модели строки методами addRow() и столбцы методами addColumn (), вставляют строку в указанное место методами insertRow( ). Аргументы этих методов могут быть типа Object или Vector.

Модель позволяет заполнить ячейки объектами методом

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

Многочисленные методы getXxx () предоставляют сведения о модели.

В модели можно переставить строки методом

moveRow(int start, int end, int to);

Первые два аргумента — start и end — задают диапазон переставляемых строк, последний аргумент to — новый индекс строки, имевшей до перестановки индекс start.

Наконец, методы setDataVector() позволяют вообще заменить все содержимое модели, т. е. содержимое поля dataVector.

При создании модели ячеек таблицы часто бывает удобнее расширить класс DefaultTableModel, а не абстрактный класс AbstractTableModel. В листинге 13.3 показан пример такого расширения — модель заполняется сведениями о файлах, полученными из каталога, имя которого указывается в командной строке.

Листинг 13.3. Заполнение модели ячеек таблицы данными из каталога

import javax.swing.*; import javax.swing.table.*; import java.io.*; import java.util.*;

public class FileTable extends JFrame{

public FileTable(File dir){ super(" Таблица файлов");

JTable table = new JTable(new FileTableModel(dir));

add(new JScrollPane(table)); setSize(600, 400); setVisible(true);

setDefaultCloseOperation(EXIT ON CLOSE);

}

public static void main(String[] args){

File dir = args.length > 0 ? new File(args[0]) : new File(System.getProperty("user.home"));

new FileTable(dir);

}

}

class FileTableModel extends DefaultTableModel{

protected File dir; protected String[] fName;

protected String[] colName = new String[]{ "Имя", "Размер", "Дата и время",

"Каталог", "Для чтения", "Для записи"

};

protected Class[] colClass = new Class[]{ String.class, Long.class, Date.class, Boolean.class, Boolean.class, Boolean.class

};

public FileTableModel(File dir){ super(dir.list().length, 6); this.dir = dir; fName = dir.list();

}

public String getColumnName(int col){ return colName[col]; } public Class getColumnClass(int col){ return colClass[col]; }

public Object getValueAt(int row, int col){

File f = new File(dir, fName[row]); switch(col){

case 0: return fName[row];

case 1: return new Long(f.length());

case 2: return new Date(f.lastModified());

case 3: return f.isDirectory() ?

Boolean.TRUE : Boolean.FALSE; case 4: return f.canRead() ?

Boolean.TRUE : Boolean.FALSE; case 5: return f.canWrite() ?

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

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

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.

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

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