Traitement du focus + clic
Bonjour,
J'avais eu un soucis, mais apparement le message a été victime du crash de la BDD. Du coup, je refais le post (un peu plus concis) avec la soluce, si jamais ça peut aider quelqu'un.
Citation:
J'ai un JPanel (nommé jpLigne) avec un JTextField et un JButton, non visible par défaut (pour faire simple).
Quand je clic sur le JTextField, je colore celui-ci pour faire un effet de sélection, donc sur le FocusGained de mon JTextField, et rend visible mon JButton.
Lorsque je clic sur mon JButton, j'aimerais avoir toujours le focus d'activer (du moins, la coloration) et l'action de mon actionPerformed du JButton, car dès que le JTextField a le focus, ça inhibe, du moins j'ai l'impression, le actionPerformed (je sais pas d'où ça vient).
Re,
Peut-être qu'un peu de code peut aider à la compréhension :
- Gestion des Focus (simplifier)
Code:
1 2 3 4 5 6 7 8 9 10
|
public void focusGained(FocusEvent arg0)
{
ColorSelect(true);
}
public void focusLost(FocusEvent arg0)
{
ColorSelect(false);
} |
Avec la méthode ColorSelect :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public void ColorSelect(boolean isFocusGained)
{
if(isFocusGained)
{
jtextfield.setBackground(new Color(234,68,152));
jtextfield.setForeground(Color.white);
jtextfield.setOpaque(true);
jbutton.setVisible(true);
}
else
{
jtextfield.setBackground(null);
jtextfield.setForeground(Color.black);
jtextfield.setOpaque(false);
jbutton.setVisible(false);
}
} |
où la méthode ColorSelect(boolean f) me fait ma coloration de fond et me permet de rendre mon bouton visible.
- Action de mon bouton
Code:
1 2 3 4
| public void actionPerformed(ActionEvent arg0)
{
jtextfield.settext("quelque chose");
} |
Lorsque je clic sur mon bouton, j'ai l'impression qu'il exécute le bloc du FocusLost avant mon actionPerformed (et donc ne fait rien coté clic du bouton), or il me faudrait qu'il execute mon bloc actionPerformed puis le FocusLost.
Après quelques messages (fraco et Claythest), le plus simple est de faire partager le focus au jtextfield et au jbutton (je croyais que pour les JButton, ce n'était pas possible), sur les recommandations de Claythest ; et ça fonctionne (donc, un addFocusListener pour le jtextfield et jbutton) et le code devient :
- Gestion des Focus (simplifier)
Code:
1 2 3 4 5 6 7 8 9 10
|
public void focusGained(FocusEvent arg0)
{
ColorSelect(true);
}
public void focusLost(FocusEvent arg0)
{
ColorSelect(false);
} |
- Avec la méthode ColorSelect :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public void ColorSelect(boolean isFocusGained)
{
if(isFocusGained)
{
jtextfield.setBackground(new Color(234,68,152));
jtextfield.setForeground(Color.white);
jtextfield.setOpaque(true);
if(isMidiFerme)
jbutton.setVisible(false);
else
jbutton.setVisible(true);
}
else
{
jtextfield.setBackground(null);
jtextfield.setForeground(Color.black);
jtextfield.setOpaque(false);
jbutton.setVisible(false);
}
} |
Voili voilou, Bonne journée