Je suis en train de créer un éditeur de niveau pour mon jeu. J'ai un panneau de propriétés où je peux modifier les propriétés de l'objet sélectionné. J'ai aussi un bouton Enregistrer pour écrire le niveau xml.Java Swing: Focus question
Un champ édition est soumis (*) lorsque le composant éditeur a perdu le focus ou Entrez est pressé. Cela fonctionne très bien, mais le seul problème est que lorsque j'ai cette séquence d'actions:
- Modifier un champ
- Appuyez sur le bouton Enregistrer
Parce que, ce qui se passe est la suivante:
- Je modifier le champ
- j'appuie sur le bouton enregistrer
- le chier vel est enregistré
- Le champ a perdu le focus
- La modification est soumise
Comme vous pouvez le voir, c'est le mauvais ordre. Bien sûr, je veux que le champ à perdre son attention, ce qui provoque le soumettre et puis enregistrer le niveau.
Existe-t-il une astuce, un hack ou une solution de contournement pour que le champ ne perde pas le focus, puis exécute l'action listener du bouton de sauvegarde?
Merci d'avance.
(* submit = la modification du champ est également dans la propriété de l'objet)
EDIT: Pour le terrain, je suis sur un FocusAdapter avec focusLost
:
FocusAdapter focusAdapter = new FocusAdapter()
{
@Override
public void focusLost(FocusEvent e)
{
compProperties.setProperty(i, getColor());
record(); // For undo-redo mechanism
}
};
Et pour le bouton un simple ActionListener
avec actionPerformed`.
btnSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
// Save the level
}
});
Aucune idée du fonctionnement du code, merci de poster ici le code approprié, car il existe d'autres options en utilisant 'DocumentListener', ou en utilisant' AncesorListener', ou juste en tapant 'FocucHell' dans' invokeLater' avec 'myTextField.setText (myTextField.getText); ' – mKorbel
@mKorbel: J'ai essayé d'encapsuler le processus de sauvegarde dans un' invokeLater', mais il est toujours dans le mauvais ordre. –
Voir aussi cette [Q & A] (http://stackoverflow.com/questions/6803976/focusevent-doesnt-get-the-last-value-of-jformattedtextfield-how-i-can-get-it/6804749#6804749) . – trashgod