Читаем Графические интерфейсы пользователя Java полностью

Интерфейс TableCellEditor расширяет интерфейс CellEditor и добавляет к его методам только один метод getTableCellEditorComponent, который возвращает компонент, пригодный для редактирования, например, объект класса JTextField, для заданной ячейки с индексами (row, column) и содержимым value.

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



Интерфейс TableCellEditor реализован классом DefaultCellEditor.



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

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

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

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

Этот редактор позволяет изменять истинность содержимого ячейки.

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

В этом примере мы реализуем редактор ячеек таблицы на основе интерфейса TableCellEditor.



Этот редактор предназначен для редактирования таблицы, отображающей целые числа.

В конструкторе редактора мы присоединяем к компоненту редактирования, текстовому полю, слушатель, который при нажатии пользователем клавиши Enter, вызывает метод stopCellEditing редактора.

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

В методе stopCellEditing редактора, мы делаем обратное, переводим строку в целое число.



И если это не удается – выбрасывается исключение.

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

Назначить этот редактор для таблицы мы можем методом setDefaultEditor, в котором указываем, для какого типа данных предназначен этот редактор.



Для ячеек всей таблицы, или ячеек конкретного столбца, можно установить всплывающую подсказку, используя соответствующий рендерер и метод setToolTipText.



Для заголовка таблицы также можно установить всплывающую подсказку, получив компонент JTableHeader и применив к нему метод setToolTipText.

Таблица JTable обеспечивает сортировку строк таблицы в порядке возрастания/убывания и отфильтровку строк (из модели данных таблицы), чтобы они отображались в представлении компонента.



Чтобы предотвратить путаницу, надо заметить, что сортировка и фильтрация затрагивают только представление, а не модель данных таблицы.

Сортировка и фильтрация основаны на концепции объекта сортировщика строк, который сортирует (и фильтрует) строки.

Самый простой способ ввести сортировщик строк в компонент таблицы – это вызвать метод setAutoCreateRowSorter.

Передача значения true в метод setAutoCreateRowSorter заставляет таблицу JTable устанавливать новый экземпляр объекта TableRowSorter в качестве сортировщика строк при каждом изменении модели.

Таким образом, для сортировки строк таблицы вы просто вызываете метод setAutoCreateRowSorter, если вы не планируете настраивать сортировщик строк.

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

Вы получите объект RowSorter, к которому вы можете присоединить слушатель сортировки.

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

Вы можете программно инициировать нажатие заголовка столбца для его сортировки.

Для этого создается список типа List, содержащий объекты вложенного класса RowSorter.SortKey.

При создании этих объектов указывается номер столбца и порядок его сортировки.

Порядок сортировки, прямой или обратный, определяется константой ASCENDING или DESCENDING перечисления SortOrder.

Также программно отсортировать столбец вы можете с помощью метода toggleSortOrder, указав в качестве аргумента номер столбца.

Как уже говорилось ранее, перестановка строк при сортировке происходит только при выводе строк на экран.



Методами convertRowIndexToModel и convertRowIndexToView можно отследить соответствие порядкового номера строки в представлении и ее порядкового номера в модели данных.

Итак, сортировщик строк представлен абстрактным классом RowSorter.



Класс RowSorter расширен еще одним абстрактным классом DefaultRowSorter, рассчитанным на модель, в которой данные хранятся в виде таблицы.

Этот класс добавляет фильтрацию.

И наконец есть конкретная реализация сортировщика строк для модели данных TableModel – это класс TableRowSorter.

Сортировщик строк таблицы TableRowSorter создается с помощью конструктора, в котором указывается модель данных по которой будет происходить сортировка перед выводом ее на экран.



Сортировщик устанавливается для конкретной таблицы методом setRowSorter.

Сортировщик TableRowSorter использует объекты Comparator для сортировки строк.

Класс, реализующий этот интерфейс, должен предоставить метод compare, который определяет, как сопоставляются любые два объекта для сортировки.

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

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

Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

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

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

Роберт Лав

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