2014-01-20 3 views
0

я хочу создать JTree из пути к папке, сохраненный в базе данных как TestFolder/ABCD/CDEF/ghml TestFolder/ABCD/THYU/UVWZ IAM сохранения только путь не родительская структура поэтому, когда я попытаться создать структуру дерева она отлично работает для одного пути (TestFolder/ABCD/CDEF/ghml) я хочу Buid полное дерево то структура, если какой-либо один есть идея, пожалуйста, помогитеJTree из пути к папке сохраняются в базе данных

public class MainClass { 

public static void main(String[] a) throws ClassNotFoundException, SQLException { 
    JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(new JTreeEvents()); 
    f.setSize(500, 500); 
    f.setVisible(true); 
} 
} 

enter code here 

class JTreeEvents extends JPanel { 

private String driver = new String("com.mysql.jdbc.Driver"); 
private String url = new String("jdbc:mysql:); 
private String user = new String("root"); 
private String password = new String("128"); 
private Connection dbCon; 
List<String> arrayList; 
Map<String, Map<Integer, String>> map; 
String[] folderArr; 
PreparedStatement ps = null; 
java.sql.Statement s; 
ResultSet r; 
DefaultMutableTreeNode top; 
DefaultTreeModel dt; 
DefaultMutableTreeNode trees; 
DefaultTreeModel model; 
DefaultMutableTreeNode child, subchild; 
//tree 

JTree jtree; 

JTextField jtf; 

public JTreeEvents() throws ClassNotFoundException, SQLException { 
    //------------------------------------------------------------------ 
    Class.forName(driver); 
    dbCon = DriverManager.getConnection(url, user, password); 
    s = dbCon.createStatement(); 
    r = s.executeQuery("SELECT * FROM project p where p.name='MyFolder4'"); 
    arrayList = new ArrayList<String>(); 
    map = new HashMap<String, Map<Integer, String>>(); 
    Hashtable<String, Object> hashtable = new Hashtable<String, Object>(); 
    DefaultMutableTreeNode root; 
    MutableTreeNode parent; 
    DefaultMutableTreeNode parentnode; 
    TreePath path = null; 
    while (r.next()) { 
     arrayList.add(r.getString("path")); 
    } 

    for (String str : arrayList) { 
     if (str != null) { 
      folderArr = str.split("/"); 
      String projName = str.split("/")[0]; 
      root = new DefaultMutableTreeNode(projName); 
      model = new DefaultTreeModel(root); 
      jtree = new JTree(model); 

      for (int i = 0; i < folderArr.length; i++) { 

       if (i == 0) { 
        parent = new DefaultMutableTreeNode(folderArr[0]); 
       } else { 
        path = jtree.getNextMatch(folderArr[i - 1].toString(), 0, Position.Bias.Forward); 
        if (path != null) { 
         System.out.println(path); 
        } 
        parent = (DefaultMutableTreeNode) (MutableTreeNode)               path.getLastPathComponent();          

       } 
enter code here 
       model = (DefaultTreeModel) jtree.getModel(); 
       model.insertNodeInto((DefaultMutableTreeNode) new       DefaultMutableTreeNode(folderArr[i]), parent, parent.getChildCount()); 

       model.reload(); 
       jtree.expandPath(path); 
      } 
     } 

    } 

    int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED; 
    int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; 
    JScrollPane jsp = new JScrollPane(jtree, v, h); 

    add(jsp, BorderLayout.CENTER); 

    jtf = new JTextField("", 20); 
    add(jtf, BorderLayout.SOUTH); 

    jtree.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent me) { 
      doMouseClicked(me); 
     } 
    }); 
} 
enter code here 
void doMouseClicked(MouseEvent me) { 
    TreePath tp = jtree.getPathForLocation(me.getX(), me.getY()); 
    if (tp != null) { 
     jtf.setText(tp.toString()); 
    } else { 
     jtf.setText(""); 
    } 
} 
     private TreePath find(DefaultMutableTreeNode root, String s) { 
@SuppressWarnings("unchecked") 
Enumeration<DefaultMutableTreeNode> e = root.depthFirstEnumeration(); 
while (e.hasMoreElements()) { 
    DefaultMutableTreeNode node = e.nextElement(); 
    if (node.toString().equalsIgnoreCase(s)) { 
     return new TreePath(node.getPath()); 
      } 
} 
return null; 
    } 
} 

ответ

1

Там есть несколько вещей, которые не работают в вашем коде. Сначала код для построения дерева может быть значительно упрощена, как это:

public JTreeEvents() throws ClassNotFoundException, SQLException { 
    // ... fill the array list from the database .. 

    for (String path: arrayList) { 
    DefaultMutableTreeNode currentParent = root; 
    String[] pathComponents = path.split("/"); 
    for (String comp: pathComponents) { 
     DefaultMutableTreeNode child = findChild(currentParent, comp); 
     if (child == null) { 
     child = new DefaultMutableTreeNode(comp); 
     currentParent.add(child); 
     } 
     currentParent = child; 
    } 
    } 

    model = new DefaultTreeModel(root); 
    jtree = new JTree(model); 

    // ... build the rest of the GUI components 
} 

private DefaultMutableTreeNode findChild(DefaultMutableTreeNode parent, String s) { 
    for (int i=0; i<parent.getChildCount(); i++) { 
    DefaultMutableTreeNode child = (DefaultMutableTreeNode) parent.getChildAt(i); 
    if (s.equals(child.getUserObject())) return child; 
    } 
    return null; 
} 

Вторая вещь, что JPanel поставляется по умолчанию, без макета, поэтому вам нужно добавить один явно, прежде чем добавлять любой компонент к нему:

this.setLayout(new BorderLayout()); 

Так полный код JTreeEvent становится, избавившись от всех неиспользуемых переменных объявлений:

public class JTreeEvents extends JPanel { 
    private String driver = new String("com.mysql.jdbc.Driver"); 
    private String url = new String("jdbc:mysql:"); 
    private String user = new String("root"); 
    private String password = new String("128"); 
    private Connection dbCon; 
    List<String> arrayList; 
    PreparedStatement ps = null; 
    java.sql.Statement s; 
    ResultSet r; 
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("/"); 
    DefaultTreeModel model; 
    JTree jtree; 
    JTextField jtf; 

    public JTreeEvents() throws ClassNotFoundException, SQLException { 
    Class.forName(driver); 
    dbCon = DriverManager.getConnection(url, user, password); 
    s = dbCon.createStatement(); 
    r = s.executeQuery("SELECT * FROM project p where p.name='MyFolder4'"); 
    arrayList = new ArrayList<String>(); 
    while (r.next()) { 
     arrayList.add(r.getString("path")); 
    } 

    for (String path: arrayList) { 
     DefaultMutableTreeNode currentParent = root; 
     String[] pathComponents = path.split("/"); 
     for (String comp: pathComponents) { 
     DefaultMutableTreeNode child = findChild(currentParent, comp); 
     if (child == null) { 
      child = new DefaultMutableTreeNode(comp); 
      currentParent.add(child); 
     } 
     currentParent = child; 
     } 
    } 

    setLayout(new BorderLayout()); 

    model = new DefaultTreeModel(root); 
    jtree = new JTree(model); 

    int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED; 
    int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; 
    JScrollPane jsp = new JScrollPane(jtree, v, h); 
    add(jsp, BorderLayout.CENTER); 

    jtf = new JTextField("", 20); 
    add(jtf, BorderLayout.SOUTH); 

    jtree.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent me) { 
     doMouseClicked(me); 
     } 
    }); 
    } 

    void doMouseClicked(MouseEvent me) { 
    TreePath tp = jtree.getPathForLocation(me.getX(), me.getY()); 
    if (tp != null) { 
     jtf.setText(tp.toString()); 
    } else { 
     jtf.setText(""); 
    } 
    } 

    private DefaultMutableTreeNode findChild(DefaultMutableTreeNode parent, String s) { 
    for (int i=0; i<parent.getChildCount(); i++) { 
     DefaultMutableTreeNode child = (DefaultMutableTreeNode) parent.getChildAt(i); 
     if (s.equals(child.getUserObject())) return child; 
    } 
    return null; 
    } 
} 

Я проверил это без материала базы данных, вручную путем добавления пути к списку массива в моем коде, и он прекрасно работает:

enter image description here

+0

Спасибо и за ответ – user3214170

+0

Лол он работает fine..thanks снова – user3214170

+0

как отобразить эту dyanamically сгенерированного JTree или модель дерева в пользовательском интерфейсе ? есть ли какая-либо древовидная структура в jsp или любая простая древовидная модель в javascript или jquery, пожалуйста, предложите, пожалуйста, помощь – user3214170

Смежные вопросы