views:

81

answers:

2

Hi,

I have two events for two seperate components, but there is a problem. JTabbedPane's stateChanged event is fired before JFormattedField's focusLost event. Is there a way of making stateChange event to be fired after focusLost event.

Thanks, Tuna

+1  A: 

From what I checked in the JTabbedPane sources, the fireStateChanged() method triggers a focus change event if necessary, before firing the actual "stateChanged" event to the listeners.

So in theory, it should happen before. However, since I don't know what is happening in the called method (SwingUtilities2.tabbedPaneChangeFocusTo(newComp)), it's highly possible that the event goes into another thread, being related to focus management.

The fireStateChanged() is a protected method, so you could override it in your own JTabbedPane, and make sure the behavior is the one you want.

Give more details about your actual use case, to see if there can be a more appropriate solution.

Gnoupi
+1 for referencing the source
Lord Torgamus
+3  A: 

While Java guarantees event will be fired the order is not guaranteed and may differ on various platforms.

A potential solution is to wrap the stateChanged code in a SwingUtilities.invokeLater(). This will place the code at the end of the Event Dispatch Thread (EDT) so it should execute after the focusLost code.

camickr