|
leska
|
|
Нужно, чтобы модель в JList была всегда отсортирована.11.09.2011, 03:06. Показов 1899. Ответов 7
Метки нет (Все метки)
Суть в следующем. Есть список JList. Нужно сделать так, чтобы можель у этого списка была всегда отсортрована. С самой моделью проблем нет:
public class SortedListModel extends AbstractListModel { public static Comparator defaultStringComparator = new Comparator() { public int compare(Object o1, Object o2) { return o1.toString().compareTo(o2.toString()); } }; private TreeSet delegate = null; ..... и так далее. Нужно как-то сделать так, чтобы мы могли поставить нашему списку только правильную модель. Один из вариантов решения -- создать пустой интерфейс что-то типа WellOrdered, добавить его к SortedListModel. а у списа переписать setModel(), где роверять, имплементит ли наша модель необходмый интерфейс. Мне такое решение не нравится по ряду причин: 1. Пустой интерфейс не есть хорошо само по себе. 2. Нет гарантии, что наша модель заимплементит интерфейс и будет как-то упорядочена (хотя, в случае если в интерфейс добавить какой либо метод, ответственный за сортировку, реализация его все равно остается на совести программиста). Может у кого есть какие идеи на этос счет? |
|
| 11.09.2011, 03:06 | |
|
Ответы с готовыми решениями:
7
За минимальное число обменов сделать так,чтобы каждая строка матрицы была отсортирована по возрастанию Динамические переменные:Поменять местами элементы матрицы так, чтобы каждая ее строка была отсортирована по возрастанию
|
|
1 / 1 / 0
Регистрация: 02.08.2011
Сообщений: 64
|
|
| 11.09.2011, 07:09 | |
|
1. Можно перезрузить JList#setModel() и проверять с помощью метода ListModel#getValue() порядок элементов. Только возвращаемые элементы должны реализовывать Comparable. К тому же это будет неэффективно работать для больших списков с виртуальными элементами.
2. По собственному опыту архитектора могу сказать, что если техническая проблема не имеет очевидного красивого решения, то её лучше решать уровнем выше. В чём собственно исходное требование? Вряд ли в том, чтобы заставить 'ленивых' программистов во что бы то ни стало написать отсортированную модель списка.
0
|
|
|
leska
|
|
| 11.09.2011, 16:28 | |
|
Предполагается, использовать список для отображения элементов, заведомо расположенных в определенном порядке. В зависимости от этого реализуется автодополнение вводимого текста.
Варианты использования -- список установленных фонтов, который традиционно отсортирован по алфавиту. Вот мне и кажется, что модель должна быть хоть как-то упорядочена. Элементы могут и не реализовывать Comparable -- по умолчанию используется new Comparator() { public int compare(Object o1, Object o2) { return o1.toString().compareTo(o2.toString()); } } или что-то очень похожее ). |
|
|
1 / 1 / 0
Регистрация: 02.08.2011
Сообщений: 64
|
|
| 12.09.2011, 08:40 | |
|
Ну и пусть модель тогда будет упорядочена. Попросить ответственного программиста сделать её упорядоченной. Можно даже модульный тест на это написать. Пусть внутри модели используется тот же TreeSet или вообще ArrayList... или я не понял? Неужели заранее неизвестно какие могут быть модели у этого списка и злоумышленник может что-то неправильно написать и кому-то от этого будет вред?
Как вариант, можно использовать сортирующий декоратор модели списка, по аналогии с сановским TableSorter (есть в туториалах на java.sun.com). Он принимает в конструктор любую модель таблицы и даёт возможность её отсортировать по любому столбцу. Можно сочинить что-нибудь подобное и для списка.
0
|
|
|
leska
|
|
| 12.09.2011, 12:33 | |
|
Нужно было, наверное, сказать с самого начала -- все это дело проектируется как АПИ. По этому о реализации модели для списка нет никакой информации. (Дефолтная модель, конечно, имеется). Вариант с декоратором подходит больше для того, чтобы ликвидировать последствия выставления неотсортированной модели. Я же хочу, чтобы программист, реализующий модель, точно знал, что она должна быть отсортирована. (Может быть, он спецификацию к АПИ поленился почитать, и не знает, что модель должна быть отсортирована
. Вот и нужно заставить его создавать отсортированную модель принудительно.
|
|
|
1 / 1 / 0
Регистрация: 02.08.2011
Сообщений: 64
|
|
| 14.09.2011, 09:28 | |
|
То есть, насколько я понял, вы создаёте с прицелом на повторное использование некий элемент управления, который состоит из списка, поля для ввода текста и логики автоматического выбора записи в списке.
Можно попробовать пойти по пути определения собственного интерфейса модели для вашего элемента управления, которая например будет содержать метод, возвращающий SortedSet или что-нибудь подобное.
0
|
|
|
1 / 1 / 0
Регистрация: 02.08.2011
Сообщений: 64
|
|
| 14.09.2011, 09:29 | |
|
А вообще, много ли программистов будут писать модели? Вы собираетесь широко опубликовать вашу работу и рассчитываете на широкое распространение? Неужели игра стоит свеч?
0
|
|
|
leska
|
|
| 14.09.2011, 12:58 | |
|
Вообще этот контрол создается как часть библиотеки различных контролов.
Модель должна по идее подходить для болшинства случаев. Но, возможно, что кому-то понадобится ее переписать... Распространяться библиотека будет как shareware. |
|
| 14.09.2011, 12:58 | |
|
Помогаю со студенческими работами здесь
8
Как зделать чтобы форма была всегда активной. Как сделать, чтобы в dbgrid всегда была прокрутка? Написать программу, следящую, чтобы другая была всегда запущена
Как сделать так, чтобы форма всегда была под фокусом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|