3
編輯JTree節點時,節點的用戶對象丟失(設置爲字符串)。我如何獲得原始用戶對象?因爲我想獲取用戶對象的ID,以便更新數據庫中的編輯名稱。JTree節點重命名保留用戶對象
我正在使用TreeModelListener的treeNodesChanged方法,如下所示。
public void treeNodesChanged(TreeModelEvent e) {
DefaultMutableTreeNode node;
node = (DefaultMutableTreeNode) (e.getTreePath().getLastPathComponent());
try {
int index = e.getChildIndices()[0];
node = (DefaultMutableTreeNode) (node.getChildAt(index));
} catch (NullPointerException ex) {}
System.out.println(node.getUserObject().getClass()); // my user object gone
}
那麼有沒有什麼辦法可以在編輯之前獲得原始用戶對象?任何DefaultTreeCellRenderer或DefaultTreeCellEditor方法都可以重寫?
感謝它的工作。我使用[DefaultTreeModel.valueForPathChanged()](http://docs.oracle.com/javase/6/docs/api/javax/swing/tree/DefaultTreeModel.html#valueForPathChanged%28javax.swing.tree.TreePath,%20java .lang.Object%29)。 Object obj =((DefaultMutableTreeNode)path.getLastPathComponent())。getUserObject(); ((MyClass的)OBJ).setName(newValue.toString()); super.valueForPathChanged(path,obj);'然後在treeNodesChanged中,我可以獲取具有更改值的用戶對象。 – Praveen 2012-07-19 06:46:29
這是否意味着我可以在valueChanged而不是treeNodesChanged中調用數據庫更新? – Praveen 2012-07-19 06:56:25
@Praveen'valueForPathChanged()'的'DefaultTreeModel'實現會調用'fireTreeNodesChanged',最終會在'treeNodesChanged'中結束。只要確保你不阻止Swing的數據庫訪問的'Event Dispatch Thread'。查看SwingWorker的冗長任務。 – tenorsax 2012-07-19 07:10:10