我有一个带有多个节点的 JTree,每个节点都有一个不同的关联 JPanel,我想向用户显示。我使用了自定义 TreeCellRenderer 并且我的代码目前按原样工作,但是(我认为)它有点太笨重了,我对此感到担忧
1)如果我只是选择了一个树节点,我的代码将一遍又一遍地刷新 JPanel。一旦选定的节点显示 JPanel 一次,我不希望它再次显示,除非在两者之间选择了另一个节点。
2) 如果用户在我的计时器为 node1 运行时选择了不同的节点(比如说 node2),我不想费心显示 node1 的 JPanel,因为用户已经离开它。
这是我感兴趣的代码:
Component ret = super.getTreeCellRendererComponent(tree, value,
selected, expanded, leaf, row, hasFocus);
DefaultMutableTreeNode entry = (DefaultMutableTreeNode)value;
// if the node is selected
if(sel)
{
// set the background of the node
setBackgroundNonSelectionColor(new Color(0x91, 0xC5, 0xFF));
// display the JPanel for the node
displayPanel(entry);
}
else
{
// if the node isn't selected then no background selection color
setBackgroundNonSelectionColor(Color.WHITE);
}
return ret;
显示面板功能:
// display the node's JPanel after sleeping for 1s
private void displayPanel(final DefaultMutableTreeNode entry)
{
Thread thr = new Thread(){
public void run(){
// sleep for 1000ms
CF.sleep("1000");
// display the panel for this node
CF.displayPanel(entry);
}
};
thr.start();
}
老实说,DefaultTreeCellRenderer 对我来说还是有点混乱。我将不胜感激有关如何使其有效运行的任何建议。