bonjour a tous,
j'ai un petit souci que je n'arrive pas a résoudre. Ma recherche de solution étant stérile, je m'en remet à vous pour trouver une solution, ou un début d'idée, de piste ou tout autre chose qui me mette sur la voie de la solution ...
je vous explique j'ai un jbutton et un jformattextfield jusque la tout va bien.
sur le jbutton j'ai mis un actionlistener pour ouvrir et fermer une popup de la taille du jformattextfield juste en dessous
sur le jformattextfield j'ai mis un focuslistener pour ouvrir et fermer une popup de la taille du jformattextfield juste en dessous
les deux séparément fonctionne bien. le souci est lorsque je clique sur le jbutton qui entraine une perte de focus la popup s'affiche alors que je voudrais qu'elle ce ferme.
pour moi il exécute donc le onfocuslost avant le actionperformed et lorsque le actionperformed vérifie l’état de la popup pour lui elle est fermer.
voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 txt.addFocusListener(internalEventFocus); btn.addActionListener(internalEventHandler); private void showPopup() { if (popup == null){ PopupFactory fac = new PopupFactory(); Point xy = getLocationOnScreen(); Panel.setVisible(true); popup = fac.getPopup(this, Panel, (int) xy.getX(), (int) (xy.getY()+this.getHeight())); popup.show(); } } private void hidePopup() { if (popup != null) { popup.hide(); popup = null; } } private class InternalEventHandler implements ActionListener{ public void actionPerformed(ActionEvent arg0) { if (arg0.getSource() == btn){ if (popup == null) { showPopup(); } else { hidePopup(); } } } } private class InternalEventFocus implements FocusListener{ @Override public void focusGained(FocusEvent arg0) { // TODO Auto-generated method stub showPopup(); } @Override public void focusLost(FocusEvent arg0) { hidePopup(); } }
Partager