В общем, тип элементов столбца, по которому ведется сортировка, должен обеспечивать сравнение элементов по величине, реализовав интерфейс Comparable.
Это можно проверить логическим методом isSortable сортировщика.
В этом случае используется компаратор, который сортирует строки на основе значений, возвращаемых методом compareTo интерфейса Comparable.
Если этот интерфейс не реализован, тогда сортируются строки, полученные из элементов столбца их методами toString.
В нашем случае элементы столбцов таблицы – это объекты String и метод isSortable вернет true.
Можно создать свой объект Comparator для столбца и установить его для сортировщика методом setComparator.
В этом примере мы создаем компаратор, который для первого столбца меняет порядок сортировки на противоположный.
Сортировщик строк таблицы TableRowSorter позволяет отфильтровать строки по какому-нибудь критерию для вывода их в представление.
Для этого надо создать фильтр – объект абстрактного класса RowFilter, и установить его методом setRowFilter сортировщика.
Для создания фильтра можно использовать статические методы класса RowFilter.
Или можно создать свой класс, определив метод include класса RowFilter.
Сортировщик обращается к этому методу при просмотре модели данных таблицы, передавая этому методу каждую строку таблицы.
Метод возвращает true, если строка отвечает фильтру и ее надо передать в представление.
Передаваемая методом строка состоит из столбцов и представлена объектом RowFilter. Entry.
Поэтому мы в методе include перебираем строку по столбцам и для каждого столбца получаем его значение методом getValue.
Затем мы проверяем это значение на соответствие критерию и возвращаем методом include значение true или false.
Разберем теперь менеджеров компоновки.
Менеджер компоновки отвечает за расположение компонентов внутри контейнера.
Другими словами, можно сказать, что компоновка размещает компоненты в определенном месте внутри контейнера.
Менеджер компоновки – это объект, который реализует интерфейс LayoutManager и определяет размер и положение компонентов в контейнере.
Хотя компоненты могут предоставлять свои пожелания по размеру и выравниванию, менеджер компоновки контейнера имеет последнее слово в отношении размера и положения компонентов в контейнере.
По умолчанию, большинство контейнеров имеют уже какой-то менеджер компоновки.
Установить другой менеджер компоновки для контейнера, можно указав экземпляр менеджера в конструкторе контейнера или с помощью метода setLayout.
Указав вместо экземпляра менеджера значение null, вы можете работать вообще без менеджера компоновки и размещать каждый компонент индивидуально в контейнере, указывая размеры и местоположение компонента с помощью метода setBounds класса java.awt.Component.
При их использовании, менеджеры компоновок работают следующим образом.
Менеджер компоновки вычисляет минимальные / предпочтительные / максимальные размеры контейнера.
И далее размещает компоненты в контейнере.
Менеджеры компоновок делают это на основе предоставленных ограничений, таких как свойств контейнера и минимальных / предпочтительных / максимальных размеров компонентов.
Если размещаемый компонент сам является контейнером, то его собственный менеджер компоновки используется для получения минимальных / предпочтительных / максимальных размеров и компоновки уже в этом контейнере.
Контейнер может быть действительным, а именно, его метод isValid возвращает true, или недействительным.
Чтобы контейнер был действительным, все его компоненты контейнера должны быть расположены и все они должны быть действительными.
Метод Container.validate может использоваться для проверки недопустимого контейнера.
Этот метод запускает менеджер компоновки для контейнера и всех дочерних контейнеров вниз по иерархии компонентов и маркирует этот контейнер как действительный.
Менеджер компоновки FlowLayout укладывает в контейнер один компонент за другим слева направо, переходя от верхних рядов к нижним.
При изменении размера контейнера ряды компонентов перестраиваются.
Компоненты поступают в ряд том порядке, в каком они заданы в методах add.
В каждом ряду компоненты могут прижиматься к левому краю, если в конструкторе первый аргумент равен FlowLayout. LEFT, к правому краю, если этот аргумент FlowLayout. RIGHT, или собираться в середине ряда, если FlowLayout. CENTER – по умолчанию.
В конструкторе менеджера, между компонентами можно задать промежутки по горизонтали и вертикали. По умолчанию эти промежутки равны 5 пикселям.
Эти же параметры можно изменить методами setHgap, setVgap, и setAlignment.
Менеджер компоновки BorderLayout делит контейнер на пять неравных областей, полностью заполняя каждую область одним компонентом.
Эти области получили географические названия – NORTH, SOUTH, WEST, EAST и CENTER.
Метод add контейнера в случае применения BorderLayout имеет два аргумента: ссылку на компонент и область, в которую помещается компонент.
Метод add с одним аргументом помещает компонент в область CENTER.