import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import java.sql.*; import java.io.*; import java.util.*; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ class Console { public static String title(Object o) { String t=o.getClass().toString(); if(t.indexOf("class") != -1) t=t.substring(6); return t; } public static void setupClosing(JFrame frame) { frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void run(JFrame frame,int width,int height) { setupClosing(frame); frame.setSize(width,height); frame.setVisible(true); } public static void run(JApplet applet,int width,int height) { JFrame frame=new JFrame(title(applet)); setupClosing(frame); frame.getContentPane().add(applet); frame.setSize(width,height); applet.init(); applet.start(); frame.setVisible(true); } public static void run(JPanel panel,int width,int height) { JFrame frame=new JFrame(title(panel)); setupClosing(frame); frame.getContentPane().add(panel); frame.setSize(width,height); frame.setVisible(true); } } ///\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ //================================================ class MytreeNode extends DefaultMutableTreeNode { String mydata,mylable; MytreeNode(String ss) { super(ss); } public void setMydata(String s_mydata) { mydata=s_mydata; } public String getMydata() { return mydata; } public void setMylable(String s_mydata) { mylable=s_mydata; } public String getMylable() { return mylable; } } //=============================================== public class Trees_test extends JApplet implements TreeModelListener { JTree tree; public void init() { String url="jdbc:odbc:ypower"; String user="ypower"; String pass="ypower"; String table="lineway"; String index="id"; String parent="parentid"; String lable="simname"; cjqTree ttt=new cjqTree(url,user,pass,table,index,parent,lable); try { tree=(JTree)ttt.getTree(); }catch(ClassNotFoundException e){System.out.println("加载数据库驱动程序的时候出了错误!");} catch(InstantiationException e){System.out.println("InstantiationException");} catch(IllegalAccessException e){System.out.println("IllegalAccessException");} catch(SQLException e){System.out.println("SQLException");System.exit(0);} //树可以滚动 Container cp=getContentPane(); cp.add(new JScrollPane(tree),BorderLayout.CENTER); } public static void main(String[] args) { Console.run(new Trees_test(),500,500); } //实现TreeModelListener提供的接口/// //Void treeNodesChanged(TreeModelEvent e):当节点改变时系统就会云调用这个方法。/ //Void treeNodesInserted(TreeModelEvent e):当新增节时系统就会去调用这个方法。// //Void treeNodesRemoved(TreeModeEvent e):当删除节点时系统就会去调用这个方法。// //Void treeStructureChanged(TreeModelEvent e):当树结构改变时系统就会去调用这个方法。/// public void treeNodesInserted(TreeModelEvent e) {//当增加新节点的时候返回当前节点的所有的子节点 } public void treeNodesChanged(TreeModelEvent e) { } public void treeNodesRemoved(TreeModelEvent e) { } public void treeStructureChanged(TreeModelEvent e) { } / //TreeModelEvent方法: / //int[] getChildIndices():返回子节点群的索引值。 / //Object[] getChildren():返回子节点群. //Object[] getPath():返回Tree中一条path上(从root nod到leaf node)的节点。/ //TreePath getTreePath():取得目前位置的Tree Path. / //String toString():取得蝗字符串表示法. / / } //==================================================================== class cjqTree { private JTree mytree; DefaultTreeModel mymodel; Connection conn; Statement myst; String mysql; ResultSet myresult; String myurl,myuser,mypass,mytable,myindex,myparent,mylable; cjqTree(String url,String user,String pass,String table,String index,String parent,String lable) { myurl=url; myuser=user; mypass=pass; mytable=table; myindex =index; myparent=parent; mylable=lable; } public JTree getTree() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException { try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){System.out.println("加载驱动的时候出了错误");System.exit(0);} conn=DriverManager.getConnection(myurl,myuser,mypass); //myst=conn.createStatement(); myst= conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); //mysql="select id,simname,name from lineway where parentid='AAAA'"; mysql="Select "+ mylable+","+myindex +" from "+mytable +" where "+myparent+"='AAAA'"; myresult=myst.executeQuery(mysql); myresult.next(); String lable_this=myresult.getString(mylable); MytreeNode root=new MytreeNode(lable_this); root.setMylable(lable_this); root.setMydata(myresult.getString(myindex)); mytree=new JTree(root); mymodel=(DefaultTreeModel)mytree.getModel(); insertNodes(root); return mytree; } private void insertNodes(MytreeNode node) throws SQLException { String node_data; int rcount; node_data=node.getMydata(); mysql="select "+mylable+","+myindex +" from "+mytable+" where "+myparent+"='"+node_data+"' order by "+myindex+" asc"; myresult=myst.executeQuery(mysql); System.out.println("获取查询结果数之前!"); //向当前的节点插入查询结果 System.out.println(mysql); rcount=getResultCount(myresult); System.out.println("获取查询结果数之后!"); if (rcount > 1)//如果当前有子节点的话就把它插入 { MytreeNode[] children = new MytreeNode[rcount]; for(int j = 0;j<rcount;j++) { MytreeNode node_new=new MytreeNode(myresult.getString(myindex)+"-"+myresult.getString(mylable)); node_new.setMylable(myresult.getString(mylable)); node_new.setMydata(myresult.getString(myindex)); children[j]=node_new;//保存当前插入的子节点 mymodel.insertNodeInto(node_new,node,node.getChildCount()); myresult.next(); } System.out.println("已经插入当前的查询结果!!"); //如果当前点有子节点则调用insertNodes()直到把所有的对象都插入进去 for(int j = 0;j<rcount;j++) { insertNodes(children[j]); } System.out.println("已经插入所有的查询结果!!"); } } private int getResultCount(ResultSet result) throws SQLException//获取查询结果树并把记录移动到第一条记录 { int i = 0; while(result.next()) { i++; } System.out.println("已经获取查询结果数:"+i); try{ result.first(); }catch(SQLException e){System.out.println("指针移不到第一条记录!");} return i; } } //====================================================================
//DefaultMutableTreeNode:树的节点 // r=new DefaultMutableTreeNode("Lable") // r.add(new DefaultMutableTreeNode("Lable2") //DefaultTreeModel model; // model=(DefaultTreeModel)tree.getModel(); // model.insertNodeInto(child,chosen,0)//插入并自动更新界面 //Jtree tree; // tree=new Jtree(toot); // chosen=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();//返回当前选取的节点对象 //返回当前展开的节点和将要展开的节点 如何展开一个节点。 // |