Javaでディレクトリ構造を作成するための次のコードがあります。
コードは正常に動作
していますが、展開されたノードがディレクトリまたはファイルであることを確認したディレクトリ構造について
は疑問がありますディレクトリの場合は、それをトラバースして、その親ディレクトリのファイルとサブディレクトリを追加します。
ユーザーがノードを展開するたびに実行しています。ディレクトリを初めてトラバースしてノードを追加するときは問題ありません。
しかし、2回目に展開すると、コードは最初の展開と同じようにコンテンツを追加します...
しかし、JTreeには、コーディングごとにディレクトリに同じノードが含まれています(ディレクトリコンテンツ*ノードが展開する回数)
これがどのように維持されているか ノードが展開するたびに追加し、ノードを初回展開として取得しています。
私は間違いを犯していますか?
コード :
import java.io.*;
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.event.*;
public class tree_drive
{
JFrame frm;
JFileChooser file_c;
JTree f_tree;
public tree_drive(String path)
{
frm=new JFrame("Jtree Demo");
Container cp=frm.getContentPane();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode top = new DefaultMutableTreeNode(path);
f_tree=new JTree(top);
JScrollPane treeView = new JScrollPane(f_tree);
f_tree.addTreeSelectionListener(new TreeSelectionListener()
{
public void valueChanged(TreeSelectionEvent e)
{
DefaultMutableTreeNode node = (DefaultMutableTreeNode) f_tree.getLastSelectedPathComponent();
frm.setTitle("You hava selected : "+ node.toString());
if (node != null)
{
File t_file=new File(node.toString());
if(t_file.isDirectory())
{
try
{
for(File f : t_file.listFiles())
{
if(f.isDirectory())
{
node.add(new DefaultMutableTreeNode(f.getPath()+File.separatorChar,true));
}
else
{
node.add(new DefaultMutableTreeNode(f.getName(),false));
}
}
}
catch(Exception ge)
{ System.out.println(e);
}
}
}
}
});
frm.add(treeView);
frm.setSize(500,500);
frm.setVisible(true);
frm.pack();
}
public static void main(String ...t)
{
try
{
new tree_drive(t[0]);
}
catch(Exception e)
{
System.out.println("Plese Specify path from Command line");
}
}
}