複数のノードを持つ JTree があり、各ノードには、ユーザーに表示したい別の関連付けられた JPanel があります。私はカスタム TreeCellRenderer を利用しており、私のコードは現在そのまま機能していますが、(私は思うに)少しぎこちなく、懸念があります。
1) ツリー ノードを選択したままにしておくと、コードが JPanel を何度も更新し続けます。選択したノードが JPanel を一度表示すると、その間に別のノードが選択されない限り、再度表示したくありません。
2)ノード1のタイマーが実行されている間にユーザーが別のノード(ノード2としましょう)を選択した場合、ユーザーがそこから移動したため、ノード1の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 はまだ少し混乱しています。これを効率的に実行する方法についてアドバイスをいただければ幸いです。