2010-12-07 21 views
2

J'ai une JComboBox. J'ajoute un ActionListener en utilisant le code suivant:Différences ActionListener entre Windows et Linux

 

addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       textComboActionPerformed(evt); 
      } 
     }); 
 

Voici à quoi il ressemble quand il est affiché en premier. Il a quelques options.
alt text

Vous remarquerez que la zone de texte de base est le premier élément, et il sera donc l'élément qui montre quand le JComboBox est d'abord affiché.

Si vous cliquez sur le JComboBox, vous verrez les options disponibles en dessous.

alt text

Cependant, si je sélectionne « zone de texte de base » ne causera pas l'ActionEvent au feu. Cela a quelque chose à voir avec le fait qu'il soit le premier élément de la liste. Si je sélectionne un autre JComboBox, l'ActionEvent est déclenché.

EDIT: Sous Linux, dites que vous sélectionnez un élément et que l'événement se déclenche. Ensuite, vous sélectionnez à nouveau cet élément, il ne tirera pas la deuxième fois. Ce n'est pas isolé au premier élément. Cela a à voir avec la sélection de l'élément déjà sélectionné deux fois.

Ce problème se produit uniquement sous Linux. Sous Windows, les incendies d'événement n'ont pas d'importance sur l'élément sur lequel je clique, même le premier. Des idées sur pourquoi ce serait? Est-ce que ce comportement varie de JVM à JVM?

Merci

+0

Quel aspect avez-vous sur chaque plate-forme? ? – EboMike

+0

Quel est le comportement lorsque vous sélectionnez l'élément déjà sélectionné? Je suppose que Linux ne permet rien de sélectionner, mais Windows n'autorise rien à sélectionner, mais il montre le premier élément sélectionné. –

+0

@EboMike c'est Nimbus LaF – user489041

Répondre

2

d'abord, je pense que l'auditeur à utiliser est ItemListener (au lieu d'un ActionListener).

Comme vous le dites dans votre commentaire, cela vous donne un comportement cohérent sur toutes les plateformes: vous n'obtenez aucun événement lorsque l'élément déjà sélectionné est "re-sélectionné". C'est exactement comment un ItemListener est censé fonctionner selon le JavaDocs:

recevra un un écouteur ou deux ItemEvents lorsque l'élément sélectionné change.

Lorsque vous sélectionnez la même valeur qui est déjà sélectionnée, évidemment vous n'avez pas changement la valeur, donc pas événement est déclenché. Cependant, ce n'est pas tout à fait ce que vous voulez apparemment. Comme alternative, je suggère l'affichage de la JComboBox sans un élément présélectionné:

JComboBox comboBox = new JComboBox(model); 
comboBox.setSelectedItem(null); 

Je ne sais pas si cela est possible pour votre application, mais cette façon, vous aurez certainement obtenir un événement chaque fois qu'une valeur réelle est sélectionnée. (Je pense que cela a aussi plus de sens du point de vue de la convivialité, car pourquoi un non-expert clique-t-il sur une zone de liste déroulante pour sélectionner la valeur déjà sélectionnée?)

+0

Bon point. Non, je n'ai pas. Laisse-moi essayer ça. – user489041

+0

Non, cela n'a pas fonctionné. Je l'ai passé à l'ItemListener. J'ai ensuite essayé sur Windows. Il montre maintenant le même comportement que je vois sur Linux. Dans les images ci-dessus, Si je démarre le programme, et la première chose que je fais est de cliquer sur "Basic Text Box" l'événement ne se déclenchera pas. – user489041

+0

Peut-être que vous pourriez simplement ne pas avoir une valeur initialement sélectionnée dans votre zone de liste déroulante? J'ai changé le texte de ma réponse en conséquence ... – Thomas