/ / Actionperformed nie został wyzwolony dla JComboBox - java, swing, jcombobox, actionlistener

Actionperformed nie został uruchomiony dla JComboBox - java, swing, jcombobox, actionlistener

Mam ActionListener dołączony do JComboBox (nieedytowalny). Po wybraniu elementu z JComboBox, muszę pokazać następny przycisk w ramce.

Szkielet kodu wygląda następująco:

public void actionPerformed(ActionEvent evt)
{
if(evt.getSource()==jComboBox){
if(jComboBox.getSelectedIndex()==-1)
//Display an alert message

else{
nextButton.setVisible(true);
//Do other actions
}
}
}

Stwierdzono, że actionPerformed jest wywoływane tylkogdy wybrane są drugie, trzecie, czwarte (i tak dalej) elementy. Ale wykonanie akcji nie jest wywoływane, gdy pierwszy element zostanie wybrany po raz pierwszy. Ale jeśli pierwszy element zostanie wybrany po wybraniu innych elementów, wywołanie actioPerformed zostanie wywołane, a kod działa poprawnie.

Ten błąd pojawia się w niektórych systemach i nie dotyczy innych systemów. Każda pomoc w tym zakresie byłaby doceniana.

Z góry dziękuję!!

Odpowiedzi:

2 dla odpowiedzi № 1

To jest normalne zachowanie. Zdarzenie ActionEvent nie jest uruchamiane po ponownym wybraniu tego samego przedmiotu. Jeśli chcesz, aby zdarzenie było uruchamiane podczas tworzenia pola kombi, kod powinien być następujący:

JComboBox comboBox = new JComboBox(...);
comboBox.setSelectedIndex(-1); // remove automatic selection of first item
comboBox.addActionListener(...);
comboBox.setSelectedIndex(0);

lub

JComboBox comboBox = new JComboBox();
comboBox.addActionListener(...);
comboBox.addItem(...);
comboBox.addItem(...);

0 dla odpowiedzi nr 2

Wygląda na to, że pierwszy warunek jest trochę zły.

Jeśli chcesz wykonać określony kod, jeśli w JComboBox nie ma żadnego elementu, powinieneś sprawdzić rozmiar zawartości: jComboBox.getItemCount()==0 zamiast jComboBox.getSelectedIndex()==-1, ponieważ wybrany indeks może zależeć od różnych warunków, podczas gdy getItemCount () ma tylko 0, a pole kombi jest puste :-)