我的自定义组件由JTreea 内的三个 s组成JPanel。一次JTree只能选择一个,因此我TreeSelectionListener为每个调用clearSelection先前选择的JTree.
我想将其他TreeSelectionListeners 添加到JTrees 以确保选择处理侦听器始终首先执行。我不想把所有东西都放在一个单一的TreeSelectionListener.
我该怎么办?提前致谢!
可能您可以通过将新侦听器添加到现有侦听器来链接它们,这样下次您的侦听器被调用时,它又会将事件转发给它的侦听器。
// This is your current listener implementation
class CustomTreeSelectionListener implements TreeSelectionListener {
// listeners to which the even will be forwarded
private List<TreeSelectionListener> ownLIsteners;
public void addListener( TreeSelectionListener newListener ) {
ownListeners.add( newListener );
}
// add also removeListener( .... )
// TreeSelectionListener interface implementation...
public void valueChanged( TreeSelectionEvent e ) {
process( e ); // do what you do now
// Forward the message.
for( TreeSelectionListener listener : ownListeners ) {
listener.valueChanged( e );
}
}
}
这不是一个很好的解决方案,但您可以将代码包装在 SwingUtilities.invokeLater(...) 中。这会将代码添加到 EDT 的末尾,这意味着它将在其他侦听器代码执行后最终执行。