我有两个独立组件的两个事件,但是有一个问题。在JFormattedField的focusLost事件之前触发了JTabbedPane的stateChanged事件。是否有一种方法可以在focusLost事件之后触发stateChange事件。
谢谢, 金枪鱼
答案 0 :(得分:3)
根据我在JTabbedPane来源中检查的内容,fireStateChanged()
方法会在必要时触发焦点更改事件, 之前会向侦听器触发实际的“stateChanged”事件。
所以在理论上,它应该发生在之前。但是,由于我不知道被调用方法(SwingUtilities2.tabbedPaneChangeFocusTo(newComp)
)中发生了什么,因此事件很可能会进入另一个与焦点管理相关的线程。
fireStateChanged()
是受保护的方法,因此您可以在自己的JTabbedPane中覆盖它,并确保行为符合您的要求。
提供有关实际使用案例的更多详细信息,以了解是否有更合适的解决方案。
答案 1 :(得分:3)
虽然Java保证事件将被触发,但订单无法保证,并且可能在各种平台上有所不同。
一个可能的解决方案是将stateChanged代码包装在SwingUtilities.invokeLater()中。这将把代码放在Event Dispatch Thread(EDT)的末尾,所以它应该在focusLost代码之后执行。