Выделение нескольких элементов в JList без использования клавиши Ctrl / Command - PullRequest
8 голосов
/ 08 марта 2010

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

Обычный способ сделать это - удерживать клавишу command / ctrl и затем нажимать.

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

Ответы [ 4 ]

11 голосов
/ 08 марта 2010

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

Сказав это, вы должны иметь возможность использовать свой собственный ListSelectionModel:

list.setSelectionModel(new DefaultListSelectionModel() {
    @Override
    public void setSelectionInterval(int index0, int index1) {
        if(super.isSelectedIndex(index0)) {
            super.removeSelectionInterval(index0, index1);
        }
        else {
            super.addSelectionInterval(index0, index1);
        }
    }
});
4 голосов
/ 08 марта 2010

Для этого вы обычно используете группу флажков JCheckBox пунктов.

Пользователи уже привыкли к тому, что им нужно нажать CTRL, чтобы выбрать несколько элементов в списке. Вы не должны изменять опыт / ожидания по умолчанию.

3 голосов
/ 29 апреля 2011
list.setSelectionModel(new DefaultListSelectionModel() {
    private int i0 = -1;
    private int i1 = -1;

    public void setSelectionInterval(int index0, int index1) {
        if(i0 == index0 && i1 == index1){
            if(getValueIsAdjusting()){
                 setValueIsAdjusting(false);
                 setSelection(index0, index1);
            }
        }else{
            i0 = index0;
            i1 = index1;
            setValueIsAdjusting(false);
            setSelection(index0, index1);
        }
    }
    private void setSelection(int index0, int index1){
        if(super.isSelectedIndex(index0)) {
            super.removeSelectionInterval(index0, index1);
        }else {
            super.addSelectionInterval(index0, index1);
        }
    }
});
0 голосов
/ 08 марта 2010

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

...