Frage

Ich habe eine JList mit einigen Einzelteilen. Ich habe einen Hörer für, wenn ein Element in der Liste hinzugefügt ausgewählt wird. Hier ist der Code für das, was passiert, wenn ein Element in der Liste ausgewählt ist:

private void questionaireNamesListValueChanged(ListSelectionEvent evt) {
    try {
        inputPanel.setEnabled(false);
        inputPanel.setVisible(false);
        inputTextField.setText("");
        inputStatusLabel.setText("");
        int questionaireIndex = questionaireNamesList.getSelectedIndex();

        // Why will this be printed twice?
        System.out.println("Questionaire Index: " + questionaireIndex);

        if (remoteQuestionServer.getQuestionCount(questionaireIndex) == 5) {
            answerQuestionButton.setEnabled(true);
            addQuestionButton.setEnabled(false);
        } else {
            addQuestionButton.setEnabled(true);
            answerQuestionButton.setEnabled(false);
        }
    } catch (RemoteException ex) {
        ex.printStackTrace();
    }
} 

Wie Sie können oben habe ich eine System.out.print Aussage in und jedes Mal, wenn ich Sie auf etwas in der Liste, die ich bekommen zwei Ausgänge für das Element, zum Beispiel.

Questionaire Index: 4
Questionaire Index: 4
Questionaire Index: 2
Questionaire Index: 2
Questionaire Index: 0
Questionaire Index: 0
Questionaire Index: 2
Questionaire Index: 2

Jede Idee, warum dies geschieht?

Danke, Patrick

War es hilfreich?

Lösung

Wenn Sie eine Auswahl ändern, ein oder zwei Ereignisse auftreten können, je nach Implementierung. Wenn der Index # 4 ausgewählt ist und Sie auf dem zweiten Element klicken, dann geschieht folgendes:

  • Zuerst Index # 4 ist unmarkiert. Je nach Modell kann questionaireNamesList.getSelectedIndex() legal zurückkehren entweder 2 oder -1.
  • zweite, Index # 2 gewählt. An diesem Punkt questionaireNamesList.getSelectedIndex() wird sicherlich 2 zurück.

So gibt es zwei gefeuert Veranstaltungen. Die Definition des Begriffs, wie diese Ereignisse erzeugt werden können Spielraum für unterschiedliche JVM-Implementierungen Dinge gehen etwas anders.

Hinweis: Sie sollten wahrscheinlich den Wert eines href überprüfen <= "http://java.sun.com/javase/6/docs/api/javax/swing/event/ListSelectionEvent.html#getValueIsAdjusting ()" rel = „noreferrer“> ListSelectionEvent#getValueIsAdjusting() , um zu sehen, ob das Ereignis verarbeiten Sie ein in einer Reihe von Veranstaltungen ist. Sie müssen wahrscheinlich alle Ereignisse ignorieren, in dem diese true zurück.

Andere Tipps

Im Anschluss an die Antwort von Eddie Blick auf die getValueIsAdjusting Methode auf das Ereignis.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top