Реализация недавно использованного или избранного в JComboBox - PullRequest
1 голос
/ 17 апреля 2010

Я ищу код, который добавит поведение избранного / типа MRU в JComboBox.

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

Я обнаружил следующее (что выглядит именно так, как я хочу, но исходный код далеко не полный): http://java.sys -con.com / node / 36658

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

Ответы [ 2 ]

1 голос
/ 17 апреля 2010

Рассмотрим расширение DefaultComboBoxModel: переопределить addElement() и insertElementAt() для вставки в ноль и удаления последнего элемента.

Приложение: вот пример; для SO, лицензия cc-wiki . Я бы использовал Preferences, чтобы сохранить записи.

class MRUComboBoxModel extends DefaultComboBoxModel {

    @Override
    public void addElement(Object element) {
        this.insertElementAt(element, 0);
    }

    @Override
    public void insertElementAt(Object element, int index) {
        super.insertElementAt(element, 0);
        int size = this.getSize();
        if (size > 10) {
            this.removeElementAt(size - 1);
        }
    }
}
0 голосов
/ 17 апреля 2010

Как насчет простого подкласса JComboBox и переопределения

public void addItem(Object anObject)

, чтобы придать ему желаемую функциональность?

Вы можете просто сохранить внутренний список элементов синхронизированным с действующим, и всякий раз, когда вы добавляете новый элемент, он может проверить, если size() >= maxItems, и обрезать наименее последние.

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

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