제가 이번에 기말 프로젝트로 jtree를 이용한 프로그램을 개발하고 있습니다.
버튼 이벤트를 이용해서 JFileChooser에선택된 파일이 항목으로 추가되도록 하려 하는데
처음 트리에 항목을 추가한후
다시한번 항목을 추가하면
추가가 안되네요
분명 트리에 추가는 되는데.. ui에 업데이트가 안됩니다
아래는 제 코드입니다
-UiMain.java-
import java.awt.BorderLayout;
...
class TablePanel extends JPanel{
...
}
class TreePanel extends JPanel{
public DefaultMutableTreeNode root;
TreePanel(){
setLayout(new BorderLayout());
root = new DefaultMutableTreeNode("파일목록");
JTree tree = new JTree(root);
tree.setEditable(false);
tree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setShowsRootHandles(true);
add(new JScrollPane(tree));
}
}
public class UiMain extends JFrame implements ActionListener{
private JButton B_AddFile;
private JButton B_AddEvent;
private JFileChooser chooser;
private TablePanel panelTable;
private TreePanel paneelTree;
public UiMain(){
super("파일관리자");
setBounds(300,300,1000,500);
setLayout(null);
B_AddFile = new JButton("파일추가");
B_AddFile.setBounds(10,10,90,30);
B_AddFile.addActionListener(this);
add(B_AddFile);
...
paneelTree = new TreePanel();
paneelTree.setBounds(10,50, 300, 200);
add(paneelTree);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == B_AddFile)
{
chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(true);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int ret = chooser.showOpenDialog(null);
System.out.println("파일선택완료");
for(int i = 0; i<chooser.getSelectedFiles().length; i++)
{
System.out.println(chooser.getSelectedFiles()[i].getPath());
DefaultMutableTreeNode node;
if(chooser.getSelectedFiles()[i].isDirectory())
paneelTree.root.add(node= findFile(chooser.getSelectedFiles()[i]) );
else
paneelTree.root.add(node=new DefaultMutableTreeNode(chooser.getSelectedFiles()[i].getPath()));
}
}
}
public DefaultMutableTreeNode findFile(File f){
DefaultMutableTreeNode root = new DefaultMutableTreeNode(f.getPath());
for(int i =0; i<f.list().length; i++)
{
File inFile = new File(f.getPath()+"\"+f.list()[i]);
if(inFile.isDirectory())
root.add(findFile(inFile));
else
root.add(new DefaultMutableTreeNode(inFile.getPath()));
}
return root;
}
}
findFile()은
폴더안의 폴더안까지 들어가서
파일이 나올때까지 자신의 함수를 불러오는 재귀함수입니다.
혹시 직접 이클립스로 옴겨 확인하시고 싶다면
전체 코드 드리겠습니다.
부탁 드립니다. 선생님들
주석도... 없고 1부터 한줄씩 보라는건 좀... 코드 작성자도 찾기힘든 부분을 로직따라가면서 분석해 찾아줄 갤러가 과연있을지..
꼬리에 꼬리를 무는 4작전이다.
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.