여러 노드가있는 JTree가 있고 각 노드에는 사용자에게 표시하려는 다른 연관된 JPanel이 있습니다. 커스텀 TreeCellRenderer를 사용해 왔지만 현재 코드가 그대로 작동하지만, 조금 복잡하고 걱정이된다.JTree 선택에 따라 다른 JPanel 표시 방법을 최적화하는 방법
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;
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
죄송합니다, 코드는 내 클래스 내에서 DefaultTreeCellRenderer를 확장합니다. 더 많은 컨텍스트를 원한다면 나머지 코드를 포함 할 수 있습니다. 나는 현재 트리 션 이벤트를 사용하고 있다고 생각하지 않았습니다. 왜냐하면 저는 현재 그곳에서 액션을 듣고 있지 않기 때문에 더 좋은 아이디어 일 것입니다. – Matt