jtree에 질문을 추가하는 프로그램이 있습니다. Jtree에 대한 각 질문은 3 가지 속성을 가진 Question 유형입니다. 이름, id 및 questionText. 내 Jtree에 질문 이름 만 표시하려고하지만 노드를 선택하면 텍스트 상자에 question 텍스트가 표시됩니다.JTree 객체 유형은 객체의 일부 속성을 표시하지만 선택시 전체 객체를 반환합니다.
문제는 내가 원하는대로 Jtree가 질문의 이름을 표시하지만, 트리의 노드를 선택하면 ClassCastException이 발생합니다. 이는 내 treeSelectionListener 메소드의 getUserObject() 때문입니다. getUserObject()에 의해 반환 된 String을 가져 와서 Question 클래스로 캐스팅하려고합니다. getUserObject()없이 questionText 나 id와 같은 선택된 String의 Question 클래스 속성을 얻는 방법 또는이 트리를 나타내는 다른 방법이 있습니까? 대신 단순히
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(createdQuestion.toString());
의, @Ajay처럼
public Question rootQ = new Question("Questions", UUID.randomUUID().toString(), "What is your name?");
public DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(rootQ.toString());
public JTree tree = new JTree(rootNode);
initialise(){
//....other code to initilise
panel.add(new JScrollPane(tree));
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setShowsRootHandles(true);
tree.addTreeSelectionListener(treeMenuClicked);
tree.setRootVisible(true);
tree.setVisible(true);
panel.add(addChild());
}
public TreeSelectionListener treeMenuClicked = new TreeSelectionListener()
{
public void valueChanged(TreeSelectionEvent e)
{
TreePath currentSelection = tree.getSelectionPath();
if(currentSelection != null){
DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode)currentSelection.getLastPathComponent();
Object nodeInfo = currentNode.getUserObject();
Question questionText = (Question)nodeInfo;
txtQuestion.setText(questionText.getQuestion());
}
}};
public JButton addChild()
{
JButton btnAddChild = new JButton("Add Child");
btnAddChild.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{ String userQuestion = txtQuestion.getText();
TreePath currentSelection = tree.getSelectionPath();
if (currentSelection != null) {
Question createdQuestion = new Question(userQuestion,UUID.randomUUID().toString(),userQuestion);
DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) currentSelection.getLastPathComponent();
DefaultTreeModel model = ((DefaultTreeModel) tree.getModel());
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(createdQuestion.toString());
currentNode.add(newNode);
model.nodeStructureChanged(currentNode);
}
}});
btnAddChild.setBounds(609, 374, 117, 47);
return btnAddChild;
}
'DefaultMutableTreeNode'의 인수로 문자열 ('rootQ.toString()')을 전달하는 것처럼 보입니다. qText를 "get"해야하기 때문에 생성자 인자로'rootQ' 만 사용하십시오. – Ajay
@Ajay toString을 사용하지 않고이 작업을 시도한 결과 트리에서 전체 개체 속성을 반환한다는 것을 알았습니다. 그래서 내 나무에있는 노드는 이름, id 및 질문을 갖습니다. – geek2be