我有一个由其他人编写的摇摆代码。对于 swing 选项卡式窗格,他添加了更改和容器侦听器,并且都调用了相同的方法:
addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent theEvent ) {
someMethod();
}
} );
addContainerListener(new ContainerAdapter() {
public void componentAdded(ContainerEvent theEvent) {
someMethod();
}
public void componentRemoved(ContainerEvent theEvent) {
someMethod();
}
} );
每当从该选项卡式窗格中删除选项卡时,它会在内部调用 JTabbedPane.removeTabAt(int index),然后调用 fireStateChanged() 导致更改侦听器侦听新的更改事件。现在,随着新组件(选项卡)从选项卡式窗格中删除,它还调用容器侦听器的 componentRemoved(ContainerEvent theEvent) 方法。
两者都更改偶数和容器事件,然后调用相同的方法 someMethod(),该方法确实设置背景和前景色。
我想知道,如果这种代码可能会导致一些问题。最近我们面临着随机的 IndexOutOfBoundException 异常。我只是想知道,如果这导致了这个问题。
同样根据我对swing的理解,一旦事件被监听,它内部的逻辑应该使用工作线程(例如SwingWorker)来执行。请让我知道这是否正确。
我是摇摆新手,因此任何提示将不胜感激。谢谢。