2010-12-14 13 views
2

Existe-t-il un moyen de faire la distinction entre un index de JComboBox qui est modifié par programmation en utilisant setSelectedBoundValue et en cliquant sur le JComboBox?Actions JComboBox

Répondre

2

Ceci est laid et vraiment un pirater, mais ça marche!

Le ActionEvent contient un modificateur de champ qui, dans ce cas, est l'identifiant du bouton de la souris. Donc, en utilisant que peut vous aider à distinguer entre setSelectedIndex ou setSelectedValue et les clics de souris (par la façon dont setSelectedBoundValue n'est pas une méthode sur JComboBox):

box.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (e.getModifiers() != 0) { 
      // ~ mouse button pressed ;) 
     } 
    } 
}); 
+0

Je sais que la question dit "cliquer", mais je pense que vous devez supposer que l'utilisateur peut également utiliser la touche Entrée pour sélectionner l'élément dans la zone de liste déroulante. Dans ce 0 est retourné. Vous ne pouvez donc pas distinguer une action utilisateur d'une action programmeur. – camickr

+0

J'ai dit en cliquant pour une raison! :-RÉ – dacwe

0

setSelectedBoundValue

jamais entendu parler de cette méthode?

Est-il possible de faire la distinction entre l'indice d'un JComboBox être changé programatically

Pas vraiment. Vous pouvez supprimer l'écouteur:

comboBox.removeActionListener(...); 
comboBox.setSelectedItem(...); 
comboBox.addActionListener(...); 

Vous pouvez définir votre propre variable de classe.

manualSelection = true; 
comboBox.setSelectedIndex(...); 
manualSelection = false; 
+0

LOLz, désolé. J'étais en train d'écrire setSelectedIndex. – Rabin