JTree
에서 노드를 검색하는 응용 프로그램을 개발했습니다. "원본 트리 가져 오기"버튼을 클릭 할 때마다 clonedRoot
에 원래 데이터가 채워 져야합니다. 모든 처리는 clonedRoot
에서 수행됩니다.Jtree가 업데이트되지 않았습니다.
업데이트 된 clonedRoot
이 패널에 렌더링되지 않는 것을 제외하면 모든 것이 잘 작동합니다 (콘솔 출력 추정). 원본 데이터
clonedRoot
if(ae.getSource()==getOriginalTree) { System.out.println("Get original tree"); System.out.println("Nodes present under cloned Root before deep copying"); DisplayNodes(clonedRoot); getDeepCopy(); System.out.println("Nodes present under cloned Root after deep copying"); DisplayNodes(clonedRoot); DefaultTreeModel newModel = new DefaultTreeModel(clonedRoot); clonedTree.setModel(newModel); for (int i = 0; i < clonedTree.getRowCount(); i++) { clonedTree.expandRow(i); } System.out.println("Updated tree"); }
clonedRoot 후 검색 작업
Console Output on clicking "Get Original Tree"-
Get original tree
Nodes present under cloned Root before deep copying
A
A1
Cloning done
Nodes present under cloned Root after deep copying
A
A1
A2
A3
B
B1
B2
B3
C
C1
C2
C3
D
D1
D2
D3
E
E1
E2
E3
Updated tree
Initialization Code in ctor
{
root = new DefaultMutableTreeNode("Root");
tree = new JTree(root);
setLAF();
populateTree();
copyBuilder = new DeepCopyJTreeAlt(tree);
getDeepCopy();
System.out.println("Original Tree");
displayTree(tree);
System.out.println("Cloned Tree");
displayTree(clonedTree);
label = new JLabel("Serach Node");
field = new JTextField();
for (int i = 0; i < clonedTree.getRowCount(); i++)
{
clonedTree.expandRow(i);
}
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
pane = new JScrollPane(clonedTree);
centralPanel = new JPanel();
centralPanel.setLayout(new BorderLayout());
submit = new JButton("Search");
submit.addActionListener(new SearchActionListener());
getOriginalTree = new JButton("Get Original Tree");
getOriginalTree.addActionListener(new SearchActionListener());
buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(0, 4));
buttonPanel.add(label);
buttonPanel.add(field);
buttonPanel.add(submit);
buttonPanel.add(getOriginalTree);
centralPanel.add(pane, BorderLayout.CENTER);
centralPanel.add(buttonPanel, BorderLayout.SOUTH);
frame = new JFrame();
frame.add(centralPanel);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 500);
frame.setVisible(true);
}
private void populateTree()
{
A = addAFile("A", root);
A1 = addAFile("A1", A);
A2 = addAFile("A2", A);
A3 = addAFile("A3", A);
B = addAFile("B", root);
B1 = addAFile("B1", B);
B2 = addAFile("B2", B);
B3 = addAFile("B3", B);
C = addAFile("C", root);
C1 = addAFile("C1", C);
C2 = addAFile("C2", C);
C3 = addAFile("C3", C);
D = addAFile("D", root);
D1 = addAFile("D1", D);
D2 = addAFile("D2", D);
D3 = addAFile("D3", D);
E = addAFile("E", root);
E1 = addAFile("E1", E);
E2 = addAFile("E2", E);
E3 = addAFile("E3", E);
}
private DefaultMutableTreeNode addAFile(String fileName, DefaultMutableTreeNode parentFolder) {
DefaultMutableTreeNode newFile = new DefaultMutableTreeNode(fileName);
parentFolder.add(newFile);
return newFile;
}
트리 관련 구성 요소 (clonedTree, 원래 트리, 해당 모델 및 추가 된 패널)를 초기화 할 때 사용할 코드를 추가 할 수 있습니까? – Slimu
동일한 모델로 새 JTree를 만들면 원래 트리가 렌더링됩니다. 왜 clonedTree와 작동하지 않는지 알 수 없습니다. –
코드에서 clonedTree 만 표시되는 것을 볼 수 있습니다. 왜 2 그루의 나무를 사용합니까? – Slimu