Как установить несколько элементов, выбранных в JList, используя setSelectedValue? - PullRequest
6 голосов
/ 11 мая 2011

У меня есть jList, который динамически заполняется путем добавления в базовую listModel. Теперь, если у меня есть три строки, значение которых я знаю, и я делаю

for(i=0;i<3;i++){
    jList.setSelectedValue(obj[i],true);//true is for shouldScroll or not
}

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

Также обратите внимание, что у jList есть режим выбора:

  jList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

Заранее спасибо

Ответы [ 3 ]

10 голосов
/ 11 мая 2011

Обратите внимание, что все методы xxSelectedValue являются вспомогательными методами-обертками вокруг selectionModel (который поддерживает только выборочный доступ на основе индекса) в JList.Установка нескольких вариантов выбора для значения не поддерживается.Если вы действительно этого хотите, вам придется самостоятельно реализовать удобный метод.По сути, вам придется перебирать элементы модели, пока вы не найдете соответствующие индексы и не вызовете методы, основанные на индексах, что-то вроде:

public void setSelectedValues(JList list, Object... values) {
    list.clearSelection();
    for (Object value : values) {
        int index = getIndex(list.getModel(), value);
        if (index >=0) {
            list.addSelectionInterval(index, index);
        }
    }
    list.ensureIndexIsVisible(list.getSelectedIndex());
}

public int getIndex(ListModel model, Object value) {
    if (value == null) return -1;
    if (model instanceof DefaultListModel) {
        return ((DefaultListModel) model).indexOf(value);
    }
    for (int i = 0; i < model.getSize(); i++) {
        if (value.equals(model.getElementAt(i))) return i;
    }
    return -1;
}
3 голосов
/ 11 мая 2011
jList.addSelectionInterval(0,2);
0 голосов
/ 11 мая 2011

Хотя Ответ StanislasV совершенно корректен, я бы предпочел не добавлять один интервал выбора в другой. Вместо этого вам следует предпочесть вызвать JList связанный ListSelectionModel#setSelectionInterval(int, int) метод следующим образом:

jList.getSelectionModel().setSelectionInterval(0, 3)

Если вы хотите, чтобы ваш выбор в списке не пересекался, вам, кроме того, придется написать свой собственный ListSelectionModel.

...