2010-05-04 7 views
3

J'ai deux événements pour deux composants séparés, mais il y a un problème. L'événement stateChanged de JTabbedPane est déclenché avant l'événement focusLost de JFormattedField. Existe-t-il un moyen de déclencher l'événement stateChange après l'événement focusLost.Séquence des événements en Java

Merci, Thon

Répondre

2

D'après ce que j'ai vérifié dans les sources JTabbedPane, la méthode fireStateChanged() déclenche un événement de changement de mise au point si nécessaire, avant déclenchement de l'événement « stateChanged » réelle aux auditeurs.

Donc, en théorie, cela devrait arriver avant. Cependant, puisque je ne sais pas ce qui se passe dans la méthode appelée (SwingUtilities2.tabbedPaneChangeFocusTo(newComp)), il est fort possible que l'événement passe à un autre thread, étant lié à la gestion de focus.

Le fireStateChanged() est une méthode protégée, vous pouvez donc la remplacer dans votre propre JTabbedPane et vous assurer que le comportement est celui que vous voulez.

Donnez plus de détails sur votre cas d'utilisation réel, pour voir s'il peut y avoir une solution plus appropriée.

+2

+1 pour référencer la source – Pops

3

Alors que Java garantit que l'événement sera déclenché, la commande n'est pas garantie et peut différer sur différentes plates-formes.

Une solution possible consiste à envelopper le code stateChanged dans un SwingUtilities.invokeLater(). Cela placera le code à la fin de l'Event Dispatch Thread (EDT) de sorte qu'il devrait exécuter après le code focusLost.