Как получить элементы из JList только при выборе элементов

В моей программе - JApplet - у меня есть JList, заполненный DefaultListModel. Пользователь может выбрать определенное количество элементов и указать, нажав JButton, что он/она закончил свой выбор. Затем я использую элементы, выбранные в обработчике событий ActionPerformed для JButton.

Это прекрасно работает, если ни один элемент не выбран до нажатия JButton - если ничего не выбрано, остальные инструкции в моем ActionPerformed также не работают. Я пробовал myJList.isSelectionEmpty() как отрицательное условие if, а также сравнивал длину массива, которую я получаю, от myJList.getSelectedIndices() до 0, но ни одна из них не работает.

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

Может кто-то указать мне верное направление?


person skp    schedule 16.08.2012    source источник
comment
звучит как что-то неправильное в вашей логике - пожалуйста, покажите SSCCE (или, по крайней мере, действие, которое выполняется при нажатии кнопки), которое демонстрирует проблему   -  person kleopatra    schedule 18.08.2012


Ответы (1)


Если я вас хорошо понял, это может быть одним из решений.

Первоначально отключите JButton. Затем предоставьте свой JList ListSelectionListener; внутри этого обработчика событий проверьте, сделан ли выбор (выбран хотя бы один элемент). Если да - включить JButton; в противном случае отключите его. Таким образом вы предотвратите выполнение обработчика ActionEvent JButton, если не выбран ни один элемент, чего вы и хотите (я полагаю). Предположим, что ваш JList — это lstChoices, а ваша JButton — это btnSubmit. Это должно сделать вышеупомянутое:

lstChoices.addListSelectionListener(new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent e)
        {
            if(lstChoices.getSelectedValuesList().size() > 0)
            {
                btnSubmit.setEnabled(true);
            }
            else
            {
                btnSubmit.setEnabled(false);
            }
        }
    });
person Kemal Sokolovic    schedule 23.08.2012