我的自定义组件由JTree
a 内的三个 s组成JPanel
。一次JTree
只能选择一个,因此我TreeSelectionListener
为每个调用clearSelection
先前选择的JTree
.
我想将其他TreeSelectionListener
s 添加到JTree
s 以确保选择处理侦听器始终首先执行。我不想把所有东西都放在一个单一的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 的末尾,这意味着它将在其他侦听器代码执行后最终执行。