Java中的事件序列

时间:2010-05-04 14:25:56

标签: java swing events sequence

我有两个独立组件的两个事件,但是有一个问题。在JFormattedField的focusLost事件之前触发了JTabbedPane的stateChanged事件。是否有一种方法可以在focusLost事件之后触发stateChange事件。

谢谢, 金枪鱼

2 个答案:

答案 0 :(得分:3)

根据我在JTabbedPane来源中检查的内容,fireStateChanged()方法会在必要时触发焦点更改事件, 之前会向侦听器触发实际的“stateChanged”事件。

所以在理论上,它应该发生在之前。但是,由于我不知道被调用方法(SwingUtilities2.tabbedPaneChangeFocusTo(newComp))中发生了什么,因此事件很可能会进入另一个与焦点管理相关的线程。

fireStateChanged()是受保护的方法,因此您可以在自己的JTabbedPane中覆盖它,并确保行为符合您的要求。

提供有关实际使用案例的更多详细信息,以了解是否有更合适的解决方案。

答案 1 :(得分:3)

虽然Java保证事件将被触发,但订单无法保证,并且可能在各种平台上有所不同。

一个可能的解决方案是将stateChanged代码包装在SwingUtilities.invokeLater()中。这将把代码放在Event Dispatch Thread(EDT)的末尾,所以它应该在focusLost代码之后执行。