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

В общем, тип элементов столбца, по которому ведется сортировка, должен обеспечивать сравнение элементов по величине, реализовав интерфейс Comparable.

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

В этом случае используется компаратор, который сортирует строки на основе значений, возвращаемых методом compareTo интерфейса Comparable.

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

В нашем случае элементы столбцов таблицы – это объекты String и метод isSortable вернет true.

Можно создать свой объект Comparator для столбца и установить его для сортировщика методом setComparator.

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

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



Для этого надо создать фильтр – объект абстрактного класса RowFilter, и установить его методом setRowFilter сортировщика.

Для создания фильтра можно использовать статические методы класса RowFilter.

Или можно создать свой класс, определив метод include класса RowFilter.

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

Метод возвращает true, если строка отвечает фильтру и ее надо передать в представление.

Передаваемая методом строка состоит из столбцов и представлена объектом RowFilter. Entry.

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

Затем мы проверяем это значение на соответствие критерию и возвращаем методом include значение true или false.

Layout Manager

Разберем теперь менеджеров компоновки.




Менеджер компоновки отвечает за расположение компонентов внутри контейнера.

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

Менеджер компоновки – это объект, который реализует интерфейс LayoutManager и определяет размер и положение компонентов в контейнере.

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

По умолчанию, большинство контейнеров имеют уже какой-то менеджер компоновки.

Установить другой менеджер компоновки для контейнера, можно указав экземпляр менеджера в конструкторе контейнера или с помощью метода setLayout.

Указав вместо экземпляра менеджера значение null, вы можете работать вообще без менеджера компоновки и размещать каждый компонент индивидуально в контейнере, указывая размеры и местоположение компонента с помощью метода setBounds класса java.awt.Component.

При их использовании, менеджеры компоновок работают следующим образом.

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

И далее размещает компоненты в контейнере.

Менеджеры компоновок делают это на основе предоставленных ограничений, таких как свойств контейнера и минимальных / предпочтительных / максимальных размеров компонентов.

Если размещаемый компонент сам является контейнером, то его собственный менеджер компоновки используется для получения минимальных / предпочтительных / максимальных размеров и компоновки уже в этом контейнере.

Контейнер может быть действительным, а именно, его метод isValid возвращает true, или недействительным.

Чтобы контейнер был действительным, все его компоненты контейнера должны быть расположены и все они должны быть действительными.

Метод Container.validate может использоваться для проверки недопустимого контейнера.

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

FlowLayout

Менеджер компоновки FlowLayout укладывает в контейнер один компонент за другим слева направо, переходя от верхних рядов к нижним.




При изменении размера контейнера ряды компонентов перестраиваются.

Компоненты поступают в ряд том порядке, в каком они заданы в методах add.

В каждом ряду компоненты могут прижиматься к левому краю, если в конструкторе первый аргумент равен FlowLayout. LEFT, к правому краю, если этот аргумент FlowLayout. RIGHT, или собираться в середине ряда, если FlowLayout. CENTER – по умолчанию.

В конструкторе менеджера, между компонентами можно задать промежутки по горизонтали и вертикали. По умолчанию эти промежутки равны 5 пикселям.

Эти же параметры можно изменить методами setHgap, setVgap, и setAlignment.

BorderLayout

Менеджер компоновки BorderLayout делит контейнер на пять неравных областей, полностью заполняя каждую область одним компонентом.




Эти области получили географические названия – NORTH, SOUTH, WEST, EAST и CENTER.

Метод add контейнера в случае применения BorderLayout имеет два аргумента: ссылку на компонент и область, в которую помещается компонент.

Метод add с одним аргументом помещает компонент в область CENTER.

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

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

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