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

который должен выполнять любой редактор ячеек таблицы. Этот метод формирует компонент, пригодный для редактирования, например объект класса JTextField, для заданной ячейки с индексами (row, column) и содержимым value. Дополнительно указывается таблица table, в которой происходит редактирование. Метод может учесть параметр isSelected, показывающий, выделена ячейка или нет.

Сам же интерфейс CellEditor описывает несколько методов, из которых наиболее важны два. Один из них- логический метод stopCellEditing() - возвращает true, если

редактирование ячейки завершено и следует сохранить сделанные изменения. Он возвращает false, если редактирование еще не завершено. В это время удобно сделать проверку измененной ячейки. Второй метод cancelCellEditing () отменяет редактирование.

При изменении содержимого ячейки происходит событие класса ChangeEvent, которое можно отследить, присоединив к редактору слушателя события методом

addCellEditorListener(CellEditorListener).

Интерфейс TableCellEditor реализован классом DefaultCellEditor. Конструкторы этого класса применяют в качестве конкретных редакторов компоненты JCheckBox, JComboBox и JTextField.

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

Компонент JCheckBox используется для изображения в виде флажка логического содержимого ячейки типа boolean, как показано на рис. 13.1. Этот редактор позволяет изменять истинность содержимого ячейки.

Компонент JComboBox применяется для ввода в ячейку одного из нескольких значений, содержащихся в раскрывающемся списке.

В листинге 13.6 приведен пример программы, позволяющей устанавливать разные редакторы для изменения содержимого различных ячеек таблицы. В примере ячейка в третьей строке и во втором столбце редактируется компонентом JComboBox. Результат показан на рис. 13.3.

Листинг 13.6. Разные редакторы ячеек таблицы

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

public class RowEd extends JFrame{ public RowEd(){

super(, Редактор строки,);

DefaultTableModel dm = new DefaultTableModel(); dm.setDataVector(

new Object[] [Н^Имя11, ''Иван'1},

{''Фамилия'', ''Петров'1},

{''Пол'', ''Мужской''}}, new Object[]{"Cотрудник", ''Сведения''});

JTable table = new JTable(dm);

JComboBox cb = new JComboBox(); cb. addItem (''Мужской'') ; cb.addItem('Женский');

RowEditor rowEd = new RowEditor(table); rowEd.setEditorAt(2, new DefaultCellEditor(cb)); table.getColumn('Сведения').setCellEditor(rowEd);

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

}

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

}

}

class RowEditor implements TableCellEditor{

protected Hashtable editors;

protected TableCellEditor editor, defEditor;

JTable table;

public RowEditor(JTable table){ this.table = table; editors = new Hashtable();

defEditor = new DefaultCellEditor(new JTextField());

}

public void setEditorAt(int row, TableCellEditor editor){ editors.put(new Integer(row), editor);

}

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column){

return editor.getTableCellEditorComponent(table, value, isSelected, row, column);

}

public Object getCellEditorValue(){ return editor.getCellEditorValue();

}

public boolean stopCellEditing(){ return editor.stopCellEditing();

public void cancelCellEditing(){ editor.cancelCellEditing();

}

public boolean isCellEditable(EventObject anEvent){ selectEditor((MouseEvent)anEvent); return editor.isCellEditable(anEvent);

}

public void addCellEditorListener(CellEditorListener l){ editor.addCellEditorListener(l);

}

public void removeCellEditorListener(CellEditorListener l){ editor.removeCellEditorListener(l);

}

public boolean shouldSelectCell(EventObject anEvent){ selectEditor((MouseEvent)anEvent); return editor.shouldSelectCell(anEvent);

}

protected void selectEditor(MouseEvent e){ int row = (e == null) ?

table.getSelectionModel().getAnchorSelectionIndex() : table.rowAtPoint(e.getPoint());

editor = (TableCellEditor)editors.get(new Integer(row)); if (editor == null) editor = defEditor;

}

}

Г-Редактор строкиВ®®’
СотрудникСведения
ИмяИван-
ФамилияПетров
ПолМч/жпклй т4
МужскойЖенский■а

Рис. 13.3. Компонент JComboBox в ячейке таблицы

Сортировка строк таблицы

Вы знаете, что, работая с электронными таблицами, такими как MS Excel, можно отсортировать строки таблицы по какому-нибудь столбцу, просто щелкнув мышью по заголовку столбца. Повторный щелчок вызовет сортировку в обратном порядке.Такая возможность есть и в классе JTable. Самый простой способ реализовать ее — это включить сортировку методом setAutoCreateRowSorter(true):

JTable table = new JTable(); table.setAutoCreateRowSorter(true);

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

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

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.

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

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