我的自定义组件由JTree
内的三个JPanel
组成。每次只能选择一个JTree
,因此我为每个在之前选择的TreeSelectionListener
上调用clearSelection
的人JTree
添加了TreeSelectionListener
。
我想在JTree
中添加其他TreeSelectionListener
,以确保首先执行选择处理侦听器。我不想把所有东西放在一个{{1}}中。
我该怎么办?提前谢谢!
答案 0 :(得分:3)
可能你可以通过以下方式将侦听器添加到现有侦听器来链接它们,下次调用侦听器时它会将事件转发给侦听器。
// 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 );
}
}
}
答案 1 :(得分:1)
不是一个非常好的解决方案,但您可以将代码包装在SwingUtilities.invokeLater(...)中。这会将代码添加到EDT的末尾,这意味着它将在执行其他侦听器代码后最终执行。