我已经实现了一个扩展 JTree 的导航树。每点击一个节点,删除前一个表单后,会显示该节点提供的表单。
如果节点没有提供表单,则简单地删除旧表单。
我的问题是显示第一个表单的部分有效,但是当我单击没有表单(null)的节点时,旧表单仍在显示,直到我调整窗口大小。
这是我的代码:
public class NavigationTree extends EncoTree {
private Container target = null;
public NavigationTree(Color from, Color to, Container trg) {
super(from, to);
this.target = trg;
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me){
TreePath tps = getSelectionPath();
if(tps != null){
cstmMutableTreeNode node = (cstmMutableTreeNode) getLastSelectedPathComponent();
target.removeAll();
if(node.form != null){
node.form.construct();
node.form.setPreferredSize(new Dimension(200, target.getSize().height));
target.add(node.form, BorderLayout.PAGE_START);
}
target.validate();
}
}
});
}
}
据我了解repaint()
,一旦我重新验证容器,就应该在 EDT 中排队请求。
那么,为什么无需调整窗口大小就可以显示第一个表单,而简单地删除组件却不行呢?