2010-03-31 5 views
3

Cela peut être une question stupide, mais je dois demander!Java MouseEvents ne fonctionne pas

J'ai les extraits de code suivants qui sont censés exécuter leurs méthodes correspondantes lorsque l'utilisateur interagit avec des objets. Pour une raison quelconque, "foo" n'est jamais imprimé, mais "bar" est.

Je n'obtiens aucune exception ou trace de pile. Qu'est-ce qui me manque dans le MouseListener? Merci d'avance. Mouse1200 fonctionne parfaitement sur un JCheckBox implémenté exactement de la même manière!

EDIT:

+0

Je me rends compte que cette explication est un peu clairsemée. S'il vous plaît demander si vous avez besoin d'informations supplémentaires. :) –

Répondre

3

JSpinner est un composant composite constitué d'un champ de texte et de 2 boutons. Il est possible d'ajouter des écouteurs de souris à tous ceux en itérant sur les résultats de getComponents() et en ajoutant un écouteur à chacun.

Cependant, dans mon expérience, quand quelque chose prend autant de travail, vous allez probablement à tort.

Pourquoi avez-vous besoin des informations saisies par la souris pour un JSpinner?
Que voulez-vous faire avec cet événement?

Mise à jour: Si vous cherchez à fournir des informations sur toutes les commandes de votre panneau, vous pouvez regarder à l'aide d'un GlassPane pour détecter le composant sous la souris.

A Well-behaved Glasspane par Alexander Potochkin est un bon point de départ.

+0

J'ai un autre composant dans lequel je veux afficher du texte qui explique ce que le spinner fait. Comme une barre de statut, je suppose! –

+0

Peut-être envisager d'utiliser une info-bulle au lieu d'afficher la fonction dans la barre d'état? – Adamski

+0

Je l'avais considéré, mais j'ai besoin d'utiliser des infobulles ailleurs pour d'autres raisons et par souci de cohérence, je préfère l'utiliser. Sûrement c'est quelque chose de stupide que j'ai raté? Je ne vois pas pourquoi cela fonctionnerait sur d'autres composants et non sur des filateurs? –

2

Ceci est une supposition mais je soupçonne que vous devez ajouter un MouseListener à l'éditeur de JSpinner (via un appel à getEditor()). J'imagine que l'éditeur Component occupe tout l'espace disponible au sein du JSpinner et intercepte donc tous les MouseEvent s.

+0

Merci pour votre réponse. C'est ce que tu veux dire?senseSpinner.getEditor(). addMouseListener (new MouseAdapter() {...}) 'Cela ne semble pas fonctionner non plus. La chose amusante est, ce code a été généré en utilisant NetBeans et donc en théorie, devrait fonctionner! –

+0

Oui c'est ce que je voulais dire. En fait, vous pouvez essayer d'ajouter l'écouteur au champ de texte de l'éditeur en appelant ((JSpinner.DefaultEditor) spinner.getEditor()). GetTextField(). AddMouseListener (...). – Adamski

+0

Non, la même chose arrive. A savoir, rien! –

2

Cela a fonctionné pour moi. J'ai eu besoin de ceci afin d'évoquer une boîte de dialogue de clé contextuelle pour une facilité d'utilisation accrue en raison de nos exigences logicielles.

0

Additionnelle à @Rapier réponse ...

Si vous changez le Spinner en utilisant quelque chose comme

yourOldSpinner = new JSpinner(new SpinnerModel(...)) 

vous perdu votre previosly MouseListener ...

Si vous avez besoin de changer quelque chose de SpinnerModel, ne pas créer un nouveau, changer ses paramètres à la place! (Si vous le faites, vous devrez réassigner le MouseListener, car il sera perdu lorsque vous assignerez un nouveau SpinnerModel).

un exemple (je parle ...):

((SpinnerNumberModel)yourOldSpinner.getModel()).setValue(size/3); 
((SpinnerNumberModel)yourOldSpinner.getModel()).setMinimum(0); 
((SpinnerNumberModel)yourOldSpinner.getModel()).setMaximum(isize/2); 
((SpinnerNumberModel)yourOldSpinner.getModel()).setStepSize(1);