0

カスタムツリーノードを備えたJTreeがあり、ツリーノートのタイトルが編集された後にイベントを発生させるために必要です。これまでのところ私はこれを持っています:

tree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent e) {
                MyTreeNode node = (MyTreeNode) tree.getLastSelectedPathComponent();

                if (node == null) {
                    return;
                }
                //insert the new title in database
        });

ただし、これは選択が変更されるたびに発生します。データベースで更新できるように、ノードタイトルの値が変更されたときに起動する必要があります。何か助けはありますか?

4

3 に答える 3

2

選択が変更されると、TreeSelectionListenerがリッスンします。あなたが欲しいのはEditListenerですよね?

次に、getCellEditorを使用してエディターを取得できます。http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/JTree.html#getCellEditor

次に、CellEditorにリスナーを追加します。http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/CellEditor.html#addCellEditorListener( javax.swing.event.CellEditorListener

于 2012-09-26T19:36:18.433 に答える
2

再び私は解決策を見つけました。カスタムTreeModelListenerを作成しました:

class MyTreeModelListener implements TreeModelListener {
public void treeNodesChanged(TreeModelEvent e) {
    MyTreeNode node;
    node = (MyTreeNode)
             (e.getTreePath().getLastPathComponent());

    /*
     * If the event lists children, then the changed
     * node is the child of the node we have already
     * gotten.  Otherwise, the changed node and the
     * specified node are the same.
     */
    try {
        int index = e.getChildIndices()[0];
        node = (MyTreeNode)
               (node.getChildAt(index));
    } catch (NullPointerException exc) {}

    System.out.println("The user has finished editing the node.");
    System.out.println("New value: " + node.getUserObject());
}
public void treeNodesInserted(TreeModelEvent e) {
}
public void treeNodesRemoved(TreeModelEvent e) {
}
public void treeStructureChanged(TreeModelEvent e) {
}

}

そしてそれをツリーに追加しました:

DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);
treeModel.addTreeModelListener(new MyTreeModelListener());

tree = new JTree(treeModel);
于 2012-09-26T20:03:27.527 に答える
-1

コントローラー(または制御フローロジックを備えた別のオブジェクト)をMyTreeNodeオブジェクトに登録します。オブザーバーパターンを使用して、コントローラーに変更されたインスタンスを受信させます。次に、コントローラーは変更された値をDBに追加できます。

于 2012-09-26T19:30:34.497 に答える