首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

转 JTree运用详解

2012-12-21 
转 JTree使用详解JTree使用详解在实际开发过程中会经常使用JTree组件,平时会遇到这样或那样的问题,在此将

转 JTree使用详解
JTree使用详解

在实际开发过程中会经常使用JTree组件,平时会遇到这样或那样的问题,在此将偶得一点经验写下来,与大家共享,希望对大家有所帮助。

private JTree jtNetDevice;//数组件申明
private JScrollPane jspTree;//滚动面板申明


1、初始化
??? DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("root");
??? jtNetDevice = new JTree(rootNode);
??? jtNetDevice.setAutoscrolls(true);
??? getTreeSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//设置单选模式
??? jspTree = new JScrollPane();
??? jspTree.getViewport().add(jtNetDevice, null);

2、三个经常使用的取值函数
private DefaultTreeModel getTreeModel(){
??? return (DefaultTreeModel)jtNetDevice.getModel();
}

private DefaultMutableTreeNode getRootNode(){
??? return (DefaultMutableTreeNode)getTreeModel().getRoot();
}

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);
???????? }
??? ???????????? 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();//返回当前选取的节点对象
//返回当前展开的节点和将要展开的节点 如何展开一个节点。
//

热点排行