Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
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. Нет гарантии, что наша модель заимплементит интерфейс и будет как-то упорядочена (хотя, в случае если в интерфейс добавить какой либо метод, ответственный за сортировку, реализация его все равно остается на совести программиста).

Может у кого есть какие идеи на этос счет?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.09.2011, 03:06
Ответы с готовыми решениями:

За минимальное число обменов сделать так,чтобы каждая строка матрицы была отсортирована по возрастанию
Привет всем, и сразу скажу, что он (отборочный этап) уже закончился, так что все законно) Собственно там была задача,которую я не смог...

Динамические переменные:Поменять местами элементы матрицы так, чтобы каждая ее строка была отсортирована по возрастанию
Поменять местами элементы матрицы так, чтобы каждая ее строка была отсортирована по возрастанию, и ни один элемент в i-й строке не был...

Закрепление фигуры (чтобы всегда была видна)
Здравствуйте, подскажите, пожалуйста, можно ли закрепить фигуру, чтобы она не исчезала из поля зрения при прокрутке. На примере фигуру...

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.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.09.2011, 12:58
Помогаю со студенческими работами здесь

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

Как сделать, чтобы в dbgrid всегда была прокрутка?
Добрый день! Подскажите пожалуйста, как сделать, чтобы в dbgrid всегда была прокрутка?

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

Поменять код, чтобы в skladobj всегда была строка, содержащая DateTime.Now
Вот код программы, как её поменять чтобы в skladobj всегда была строка содержащая DateTime.Now using System; using...

Как сделать так, чтобы форма всегда была под фокусом
Как сделать так, чтобы форма всегда была под фокусом.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
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, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru