我有一個JTree與幾個節點,並且每個節點都有一個不同的關聯JPanel我想要顯示給用戶。我已經使用了一個自定義的TreeCellRenderer,而且我的代碼目前正常工作,但是(我認爲)它有點過於笨拙,我對此有所擔心如何根據JTree選擇優化顯示不同的JPanel
1)如果我只保留一個選定的樹節點,將不斷刷新JPanel。一旦選定的節點顯示了JPanel一次,我不希望它再次被選中,除非另一個節點被選中。 2)如果用戶在我的定時器運行node1時選擇了不同的節點(我們說節點2),我不想打擾顯示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;
displayPanel功能:
// 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還是有點混亂給我。我會很感激任何有關如何有效地運行的建議。
第一段代碼的上下文不是很清楚,它包含在哪裏?另外,爲什麼不僅僅使用樹選擇事件來選擇'JPanel'來顯示? – asermax 2013-03-01 18:53:44
對不起,代碼位於擴展DefaultTreeCellRenderer的類中。如果您想要更多的上下文,我可以包含其餘的代碼。我沒有考慮使用樹選擇事件,因爲我目前沒有在那裏聽一個動作,但這可能是一個更好的主意。 – Matt 2013-03-01 18:56:32