Переключение между определенными элементами в JList с множественным выбором

У меня есть класс, который расширяет JList и использует DefaultListModel.

Допустим, у меня есть список, содержащий элементы A, B, C, D и т. д.

Я могу выбрать несколько элементов, но мне бы хотелось, чтобы A и B никогда не могли быть выбраны одновременно. Поэтому я хотел бы, чтобы, если я выберу A, затем B, A будет отменено, и наоборот.

Это возможно?

Изменить: добавлена ​​начальная реализация

public TestList extends JList {
    public void TestList() {
        super(new DefaultModelList());
    }

    // Method 2
    public void addSelectionInterval(int anchor, int lead) {
        //DO Work
    }

    // Method 3
    public void setSelectedValue(Object obj, boolean shouldScroll) {
        // DO WORK
    }
}

TestList test = new TestList();
// Method 1
test.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
        // check value selected and deselect if necessary
    }
}

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


person ghost013    schedule 05.03.2015    source источник


Ответы (1)


Вам нужно будет использовать пользовательский ListSelectionModel и переопределить метод addSelectionInterval(...).

Логика в этом методе должна будет проверить элемент, который будет выбран, прежде чем вы вызовете super.addSelectionInterval(...), если выбор соответствует вашим конкретным требованиям.

person camickr    schedule 05.03.2015
comment
К сожалению, я могу использовать ListSelectionModel, потому что изменение приведет к поломке большого количества кода. Кроме того, addSelectionInvterval не имеет возможности получить элемент, который должен быть выбран. - person ghost013; 06.03.2015
comment
@ Ghost013, I can use the ListSelectionModel because changing would break a lot of code код не сломается. addSelectionInvterval does has no way of getting the item about to be selected. что, по вашему мнению, представляют параметры? - person camickr; 06.03.2015
comment
Я пробовал ваш способ, но он не работает. Насколько я могу судить, при отладке, когда я выбираю элемент в списке, addSelectionInterval не вызывается. - person ghost013; 06.03.2015
comment
@ghost013, 1) Я не предлагал переопределить JList, я предложил создать собственную модель ListSelectionModel. 2) Опубликуйте свой SSCCE, демонстрирующий проблему. - person camickr; 06.03.2015