他の人が書いた Swing コードが 1 つあります。スイング タブ付きペインの場合、彼は変更リスナーとコンテナー リスナーの両方を追加し、両方が同じメソッドを呼び出します。
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 など) を使用して実行する必要があります。これが正しいかどうか教えてください。
私はスイングが初めてなので、ヒントをいただければ幸いです。ありがとう。