0

これが私のアプリケーションです。

ここに画像の説明を入力

私がやりたいことは、ユーザーの詳細が更新されると、JTree のノードも更新されるようにすることです。これは可能ですか?JTree とそのレンダリングされたセルは既に作成されていますが?

既に作成された後でも、レンダリングされたセルを更新する例が必要です。

ここに私のビューコードがあります:

void createTree() {

    rootNode = new DefaultMutableTreeNode("users");

    for (User user : listOfUsers) {

        String id = user.getId();
        File file = new File(id);
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(file);
        rootNode.add(node);
    }

    treeModel = new DefaultTreeModel(rootNode);
    tree = new JTree(rootNode);
}

void addTreeModelListener(TreeModelListener a) {

    treeModel.addTreeModelListener(a);
}

void repaintTree() {

    treeModel.reload();
    tree.revalidate();
    tree.repaint();
}

そして、ここに私のコントローラーコードがあります:

view.addTreeModelListener(new MyTreeModelListener());

class MyTreeModelListener implements TreeModelListener {
    public void treeNodesChanged(TreeModelEvent e) {

        DefaultMutableTreeNode node;
        node = (DefaultMutableTreeNode)(e.getTreePath().getLastPathComponent());

        int index = e.getChildIndices()[0];
        node = (DefaultMutableTreeNode)(node.getChildAt(index));

        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) {}
}

オブジェクトに変更を加えた後、repaintTree() メソッドを呼び出します。今コードを調べた後、問題はノードの詳細ではなくオブジェクトの詳細を変更しているという事実にあると思いますが、それは単なる直感です。

すぐに返信してください、どうもありがとう。

4

1 に答える 1

2

Swing は MVC アーキテクチャを使用します。

そのため、ツリーに含まれるデータとレンダリングのロジックは完全に分離され、独立しています。

このOracle チュートリアルを使用すると、心配することなくツリーの内容を簡単に変更できます。更新後revalidate()にメソッドを呼び出すことを忘れないでください。repaint()

幸運を。

于 2014-04-04T11:20:33.740 に答える