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
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 ;)
}
}
});
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;
LOLz, désolé. J'étais en train d'écrire setSelectedIndex. – Rabin
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
J'ai dit en cliquant pour une raison! :-RÉ – dacwe