JFormatTextField,Jbutton et Listener
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:
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();
}
} |