0

JTree頻繁に更新しながらシミュレーターを作っています。ツリーのノードはすべてJProgressBars.

私はツリーを更新するために呼び出しtree.treeModel.insertNodeInto(,,)ています。問題は、呼び出しtreeModel.reload()を待たずに即座に更新されることです。repaint()これにより、ツリーが点滅します。setDoubleBuffered(true)ノード、ツリー、およびそれが含まれるコンテナーの設定を試みましたが、何も変わりません。

これが私のコードです:(クラスFile extends DefaultMutableTreeNode)

public class FileTree extends JTree {

    DefaultTreeModel myTreeModel;

    FileTree(File root) {
        super(root);
        myTreeModel = (DefaultTreeModel) this.getModel();
        this.treeModel = myTreeModel;
        this.setCellRenderer(new ProgressBarCellRenderer());
        this.setEditable(true);
    }

    public void update(File file, File parent) {
        myTreeModel.insertNodeInto(file, parent, parent.getChildCount());
        myTreeModel.reload();
    }

    class ProgressBarCellRenderer extends DefaultTreeCellRenderer {
        public Component getTreeCellRendererComponent(JTree tree, Object value,
                boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
            File file = (File) value;
            JProgressBar progressBar;
            progressBar = new JProgressBar(0, file.length);
            progressBar.setValue(file.completed);
            progressBar.setPreferredSize(new Dimension((int)(Math.log(file.size)*50),10));
            return progressBar;
        }
    }

}
4

3 に答える 3

2

重い成分と軽い成分が混ざり合って点滅していると思われます。このでは、円をクリックするか、囲んでいるフレームのサイズを変更することで効果を確認できます。より良いガイダンスのために、質問を編集して、説明した問題を示すsscceを含めてください。

于 2012-06-16T00:33:01.627 に答える
0

それを私が直した。私はちょうど変更しました

myTreeModel.insertNodeInto(file, parent, parent.getChildCount());

parent.add(file);

なぜ今それが機能するのかわかりません。しかし、そうです。どんなコメントでも大歓迎です!

于 2012-06-22T00:37:50.943 に答える