JAVA树形结构

图片­

//分类显示数据库里的内容­

package mypkg; ­

import java.awt.*; ­

import java.awt.event.*; ­

import javax.swing.*; ­

import javax.swing.event.*; ­

import java.util.*; ­

import java.sql.*; ­

import java.sql.Statement; ­

import javax.swing.table.*; ­

import javax.swing.tree.*; ­

/** ­

* ­

* @author Administrator ­

*/ ­

public class ClassBrowse extends JFrame implements TreeSelectionListener { ­

Statement stmt; ­

ResultSet rs,rsl; ­

DefaultTableModel dtm;//定义数据模型 ­

String[]title;//表头数组 ­

JTree tree;//树 ­

JTable table; ­

DefaultTreeModel treeModel = null;//定义一个默认的树模型,用于建立树 ­

JScrollPane scroll1,scroll2;//定义两个滚动面板 ­

JSplitPane splitPane;//定义一个分割面板 ­

    private Object con; ­

public ClassBrowse(){ ­

        ­

    try{ ­

        stmt = ConnectServer1. con. createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ­

        DefaultMutableTreeNode root = new DefaultMutableTreeNode("专业");//根 ­

                treeModel = new DefaultTreeModel(root);//建立树模型 ­

        initTree(root,0);//调用递归函数建立树模型 ­

        tree = new JTree(treeModel);//利用树模型建立树 ­

        scroll1 = new JScrollPane(tree); ­

        tree.addTreeSelectionListener(this); ­

        rs = stmt.executeQuery("select classclass.name as 班级,xsda.no as 学号,xsda.name as 姓名" + ­

                " from xsda,classclass where xsda.classid = classclass.id"); ­

        ResultSetMetaData dbmd = rs.getMetaData();//得到记录集的元数据,建立表头数组 ­

        title = new String[dbmd.getColumnCount()]; ­

        for(int i=1;i <=dbmd.getColumnCount();i++) ­

            title[i-1] = dbmd.getColumnName(i); ­

        dtm = new DefaultTableModel(null,title);//建立表格数据模型 ­

        table = new JTable(dtm);//利用数据模型建立表格 ­

      scroll2 =new JScrollPane(table); ­

        initTable();//建立表 ­

        splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scroll1,scroll2); ­

        splitPane.setOneTouchExpandable(true); ­

        splitPane.setDividerLocation(200); ­

        this.getContentPane().add(splitPane,null);} ­

    catch(SQLException e){System.out.println(e);} ­

    setTitle("分类查询学生信息"); ­

    setSize(500,400); ­

    setVisible(true); ­

        ­

    } ­

void initTree(DefaultMutableTreeNode root,int id){//这是递归函数 ­

    DefaultMutableTreeNode node = null;//定义节点 ­

    try{ ­

      Statement stmt = ConnectServer1. con. createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ­

        ResultSet rs = stmt.executeQuery("select * from classclass where parent =" + id);//查询班级类表 ­

        while(rs.next()){ ­

            int nno = rs.getInt("id");//取得分类ID ­

          String nname = rs.getString("name").trim();//取得分类名称 ­

            node = new DefaultMutableTreeNode(nname);//建立树的节点 ­

            treeModel.insertNodeInto(node, root, root.getChildCount());//插入节点 ­

            initTree(node,nno);} ­

        ­

        } ­

    catch(Exception e){} ­

    finally{ ­

        try{ ­

            rs.close(); ­

        }catch(Exception e){} ­

                    } ­

    ­

} ­

public void valueChanged(TreeSelectionEvent e){ ­

    JTree tree=(JTree)e.getSource(); ­

    //利用JTree的getLastSelectedPathCoponent()方法取得目前选取的节点 ­

    DefaultMutableTreeNode selectionNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); ­

    String name = ((String)selectionNode.getUserObject()); ­

    String sql = "selcet classclass.name as 班级,xsda.no as 学号,xsda.name as 姓名 from xsda,classclass where xsda.classid = classclass.id"; ­

    if(!name.equals("专业")) ­

        sql=sql + "and classid in(select id from classclass where rtrim(ltrim(str(id)))like(select ltrim(rtrim(str(id)))+'%'from classclass where rtrim(ltrim(name))='"+name+"'))"; ­

          try{ ­

            rs = stmt.executeQuery(sql);//利用嵌套查询查出所有数据 ­

                        initTable(); ­

        }  catch(Exception ee){} ­

} ­

void initTable(){ ­

    dtm.setRowCount(0); ­

    try{ ­

        rs.beforeFirst(); ­

        while(rs.next()){ ­

            Vector v1=new Vector(); ­

            for(int i=1;i <=title.length;i++) ­

                v1.addElement(rs.getString(i)); ­

            dtm.addRow(v1); ­

        } ­

    }catch(SQLException e){e.printStackTrace();} ­

    dtm.fireTableStructureChanged(); ­

    ­

} ­

public static void main(String arg[]){ ­

    JFrame.setDefaultLookAndFeelDecorated(true); ­

    Font font = new Font("JFrame",Font.PLAIN,14); ­

    Enumeration keys = UIManager.getLookAndFeelDefaults().keys(); ­

    while(keys.hasMoreElements()){ ­

        Object key = keys.nextElement(); ­

        if(UIManager.get(key)instanceof Font) ­

            UIManager.put(key, font); ­

                    ­

    } ­

  if(!ConnectServer1.conn("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=xsgl","sa","")){ ­

        JOptionPane.showMessageDialog(null, "连接数据库失败"); ­

        System.exit(0);//关闭数据库 ­

    } ­

    new ClassBrowse(); ­

    ­

} ­

} ­

 

 

­

 

$(function(){ $.fn.extend({ SimpleTree:function(options){ //初始化参数 var option = $.extend({ click:function(a){ } },options); option.tree=this; /* 在参数对象中添加对当前菜单树的引用,以便在对象中使用该菜单树 */ option._init=function(){ /* * 初始化菜单展开状态,以及分叉节点的样式 */ this.tree.find("ul ul").hide(); /* 隐藏所有子级菜单 */ this.tree.find("ul ul").prev("li").removeClass("open"); /* 移除所有子级菜单父节点的 open 样式 */ this.tree.find("ul ul[show='true']").show(); /* 显示 show 属性为 true 的子级菜单 */ this.tree.find("ul ul[show='true']").prev("li").addClass("open"); /* 添加 show 属性为 true 的子级菜单父节点的 open 样式 */ }/* option._init() End */ /* 设置所有超链接不响应单击事件 */ this.find("a").click(function(){ $(this).parent("li").click(); return false; }); /* 菜单项 接受单击 */ this.find("li").click(function(){ /* * 当单击菜单项 * 1.触发用户自定义的单击事件,将该 标签中的第一个超链接做为参数传递过去 * 2.修改当前菜单项所属的子菜单的显示状态(如果等于 true 将其设置为 false,否则将其设置为 true) * 3.重新初始化菜单 */ option.click($(this).find("a")[0]); /* 触发单击 */ /* * 如果当前节点下面包含子菜单,并且其 show 属性的值为 true,则修改其 show 属性为 false * 否则修改其 show 属性为 true */ /* if($(this).next("ul").attr("show")=="true"){ $(this).next("ul").attr("show","false"); }else{ $(this).next("ul").attr("show","true"); }*/ /* 初始化菜单 */ option._init(); }); /* 设置所有父节点样式 */ this.find("ul").prev("li").addClass("folder"); /* 设置节点“是否包含子节点”属性 */ this.find("li").find("a").attr("hasChild",false); this.find("ul").prev("li").find("a").attr("hasChild",true); /* 初始化菜单 */ option._init(); }/* SimpleTree Function End */ }); });
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值