2013-04-18 2 views
0

Java를 사용하는 것이 편하지만 API를 사용하는 것이 좋습니다. 언젠가는 인터넷 검색 후, 지금까지 잘 작동하는 프로그램 아래에있어. 이제 내가 원하는 것은 실행될 기능 아래의 트리에서 파일을 두 번 클릭하는 것입니다.FileTreeModel에서 파일을 두 번 클릭하십시오.

누군가 나에게 제안 할 수있는 방법은 두 번 클릭 이벤트를 이해하기 위해 리스너를 추가 할 수 있습니까? 예제가 도움이 될 것입니다. 내 작업 프로그램은 다음과 같습니다

public boolean getSomeData(String fileName){ 
    //I will make JDBC call here  
} 

,

/*http://www.chka.de/swing/tree/FileTreeModel.html 
*/ 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTree; 
import javax.swing.tree.TreeModel; 
import javax.swing.tree.TreePath; 
import javax.swing.event.TreeModelListener; 
import javax.swing.event.TreeModelEvent; 
import javax.swing.event.EventListenerList; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.util.List; 
import java.util.ArrayList; 
import java.util.Map; 
import java.util.HashMap; 
import java.io.File; 
import java.io.Serializable; 
import java.io.ObjectOutputStream; 
import java.io.ObjectInputStream; 



public class FileTreeModel 
    implements TreeModel, Serializable, Cloneable 
{ 
    protected EventListenerList listeners; 

    private static final Object LEAF = new Serializable() { }; 

    private Map map; 



    private File root; 


    public FileTreeModel(File root) 
    { 
     this.root = root; 

     if (!root.isDirectory()) 
      map.put(root, LEAF); 

     this.listeners = new EventListenerList(); 

     this.map = new HashMap(); 
    } 


    public Object getRoot() 
    { 
     return root; 
    } 

    public boolean isLeaf(Object node) 
    { 
     return map.get(node) == LEAF; 
    } 



    public int getChildCount(Object node) 
    { 
     List children = children(node); 

     if (children == null) 
      return 0; 

     return children.size(); 
    } 



    public Object getChild(Object parent, int index) 
    { 
     return children(parent).get(index); 
    } 

    public int getIndexOfChild(Object parent, Object child) 
    { 
     return children(parent).indexOf(child); 
    } 


    protected List children(Object node) 
    { 
     File f = (File)node; 

     Object value = map.get(f); 

     if (value == LEAF) 
      return null; 

     List children = (List)value; 

     if (children == null) 
     { 
      File[] c = f.listFiles(); 

      if (c != null) 
      { 
       children = new ArrayList(c.length); 

       for (int len = c.length, i = 0; i < len; i++) 
       { 
        children.add(c[i]); 
        if (!c[i].isDirectory()) 
         map.put(c[i], LEAF); 
       } 
      } 
      else 
       children = new ArrayList(0); 

      map.put(f, children);  
     } 

     return children; 
    } 



    public void valueForPathChanged(TreePath path, Object value) 
    { 
    } 


    public void addTreeModelListener(TreeModelListener l) 
    { 
     listeners.add(TreeModelListener.class, l); 
    } 

    public void removeTreeModelListener(TreeModelListener l) 
    { 
     listeners.remove(TreeModelListener.class, l); 
    } 

    public Object clone() 
    { 
     try 
     { 
      FileTreeModel clone = (FileTreeModel)super.clone(); 

      clone.listeners = new EventListenerList(); 

      clone.map = new HashMap(map); 

      return clone; 
     } 
     catch (CloneNotSupportedException e) 
     { 
      throw new InternalError(); 
     } 
    } 


    public static void main(String[] args) 
    { 
     if (args.length != 1) 
     { 
      System.err.println("Usage: java FileTreeModel path"); 
      System.exit(1); 
     } 

     File root = new File(args[0]); 

     if (!root.exists()) 
     { 
      System.err.println(root+ ": No such file or directory"); 
      System.exit(2); 
     } 

     JTree tree = new JTree(new FileTreeModel(root)); 

     JFrame f = new JFrame(root.toString()); 

     f.addWindowListener(new WindowAdapter() 
     { 
      public void windowClosing(WindowEvent e) 
      { 
       System.exit(0); 
      } 
     }); 

     f.getContentPane().add(new JScrollPane(tree)); 

     f.pack(); 
     f.setVisible(true); 
    } 
} 
+2

이 도움이됩니까을 구현해야한다고 생각? http://stackoverflow.com/questions/12847904/double-click-a-jtree-node-and-get-its-name – sanbhat

+2

@sanbhat 저에게 해줘야 할 필요가 없어졌습니다.) ... again – MadProgrammer

답변

1

난 당신이 MouseListener을 추가하고 mousePressed 방법

MouseListener ml = new MouseAdapter() { 
    public void mousePressed(MouseEvent e) { 
     if(e.getClickCount() == 2) { 
      getSomeData(...); 
     } 
    } 
}; 
tree.addMouseListener(ml); 
+0

[ 'JTree API'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JTree.html); 더 [여기] (http://stackoverflow.com/q/15625424/230513). – trashgod

관련 문제