Выбор JList, последовательные элементы помечаются как выбранные, когда всплывающее окно вводится между - PullRequest
1 голос
/ 01 марта 2012

У меня есть пара JList и JTextArea. В зависимости от выбранного элемента на JList данные будут отображаться в JTextArea. Но для некоторых данных необходимы пользовательские данные, которые собираются JOptionPane. Проблема в том, что я пересекаю JList со стрелками вверх и вниз ; * JOptionPane всплыло; выбраны оба последовательных элемента. Я имею в виду, что ранее выбранные данные не становятся невыбранными, а предполагается, что будут выбраны только последние данные. Я использую JOptionPane внутри changeTextArea() метода, а Code выглядит следующим образом. Спасибо за любую помощь!

private class JListListenerEdit implements ListSelectionListener {
    public void valueChanged(ListSelectionEvent event) {
        if (!event.getValueIsAdjusting() && listEdit.isFocusOwner()) {
            Data selection = null;
            try {
                selection = listEdit.getSelectedValue();
            } catch (Exception e) {
            }
            if (null != selection) {
                changeTextArea(selection);
            }
        }
    }
}

public void changeTextAreaEditData(SData selection) {
        if (selection.requireInputs()) {
            JOptionPane.showMessageDialog(frame,"Provide inputs to process the data.","Inputs Required", JOptionPane.INFORMATION);
            this.textAreaEditData.setText(processData(selection.getData()));
        } else {
            this.textAreaEditData.setText(selection.getData());
        }
}

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Я вижу, что вы проверяете getValueIsAdjusting() в вашем ListSelectionListener, как показано здесь . Вы можете попробовать обернуть вызов в changeTextArea() внутри Runnable, используя invokeLater().

1 голос
/ 01 марта 2012

зачем путать пользователя с таким способом, используйте JPopup (справа MouseClick) для JList, а не везде поймайте last/previous selected Item

...