2017-10-06 12 views
0

J'ai une méthode qui est appelée à un cas de changement de valeur dans une JComboBoxComment faire la différence entre un appel setSelectedItem et une des méthodes ActionPerformed dans JComboBox

public void actionPerformed(ActionEvent e) 
{ 
    Object source = e.getSource(); 
    if(source.equals(listComboBox)) 
    { 
     changeList(); 
    } 
} 


public void changeList() 
{ //do some stuff 
..... 
..... 
//warn the user 
} 

Mon problème est que cette méthode est appelée au méthode de chargement initial ainsi. Dans la méthode, un message d'avertissement s'affiche. Ce qui n'est nécessaire que lorsque l'utilisateur modifie la valeur sélectionnée de la zone de liste déroulante (pas lorsque j'ai défini une valeur à partir du code dans la méthode de chargement.)

Existe-t-il un moyen (indicateur, méthode différente) de distinguer entre ceux-ci à des actions et donner le message d'avertissement seulement quand c'est nécessaire?

+0

Copie possible de [Java JComboBox écoute un événement de sélection de modification] (https://stackoverflow.com/questions/17576446/java-jcombobox-listen-a-change-selection-event) – Berger

Répondre

0

Vous avez deux options. La première consiste à appliquer un écouteur unique à chaque composant et à gérer l'événement différemment (ce que je préfère dans la plupart des cas, car il garde le code simple pour chaque composant et mieux le lire).

La seconde consiste à identifier le composant qui déclenche l'événement. Une façon de vérifier cela est de prendre les sources de l'événement et de vérifier si elle correspond à l'objet réel ou vous pouvez juste vérifier si c'est 'instanceof' JComboBox et ensuite gérer l'événement à votre guise.

if(sourceObject == myComboBox){ 
    // handle the event 
} 

ou

if(sourceObject instanceof JComboBox{ 
    // then we are dealing with a combobox 
    // if it's the only one then you know what to do.. 
} 
1

Mon problème est que cette méthode est appelée à la méthode de charge initiale ainsi.

Ajoutez donc l'écouteur à la liste déroulante APRES la fin du chargement.