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();//返回当前选取的节点对象
//返回当前展开的节点和将要展开的节点 如何展开一个节点。
//
相关推荐
### 如何使用JTree:详解与实践 #### JTree简介 `JTree`是Java Swing中的一个组件,用于展示层次化的数据结构。它允许用户在应用程序中构建树形视图来表示目录结构、组织结构图等。`JTree`继承自`JComponent`类,...
### Java组件之JTree使用详解 #### 一、引言 `JTree`是Java Swing中的一个重要组件,用于展示层次化的数据结构。它提供了一种直观的方式来表示具有层级关系的数据,例如文件系统的目录结构或者组织架构等。本文将...
### JTree用法详解:Swing中的树状结构控件 在Java Swing中,`JTree`是一个非常重要的组件,用于展示层次结构的数据,如文件系统、组织结构图等。本文将详细介绍`JTree`的各种使用方法,包括如何创建、自定义外观、...
### JTree 的详细使用说明 #### 一、JTree 概述 `JTree` 是 Java Swing 中用于显示树状结构的数据组件。它继承自 `JComponent` 类,并且实现了 `Scrollable` 接口,这使得 `JTree` 能够在滚动面板 (`JScrollPane`)...
**JTree组件详解** 在Java Swing库中,`JTree`是一个重要的图形用户界面(GUI)组件,用于显示数据的树形结构。它允许用户通过展开和折叠节点来查看和操作层次化的信息。`JTree`是Java Swing的模型-视图-控制器...
**JTree的Doc文档详解** Java Swing库中的`JTree`组件是用于显示和操作树状数据结构的可视化工具。这个组件允许用户以图形化的方式查看层次化的信息,如文件系统目录、数据库结构或者应用程序的对象模型。在Java...
### JTree的用法详解 #### 一、引言 `JTree` 是 Java Swing 库中的一个重要组件,用于在图形用户界面 (GUI) 中显示层次结构数据。它非常适合用来展示具有分层关系的信息,例如文件系统目录结构、组织结构等。 ####...
《Java中的JTree组件详解与应用》 在Java编程领域,GUI(图形用户界面)设计是不可或缺的一部分,其中Swing库提供了丰富的组件用于构建交互式的用户界面。在这些组件中,JTree是一个非常实用的控件,它允许用户以...
**ACCP体系与JTree详解** ACCP(Accelerated Career Certification Program)是一种针对信息技术领域的职业认证体系,旨在快速提升学员的技能,使他们能够胜任IT行业的相关职位。在这个体系中,JTree是一个重要的...
#### (三) 对JTree从创建到使用详解 **初始化**:初始化JTree控件时,需要提供一个TreeModel来定义树的结构。 - **三个经常使用的取值函数**:获取树节点的信息,如`getRoot()`获取根节点。 - **根据node得到path**...
**JTree2.0 目录树Demo源码详解** `JTree` 是Java Swing库中的一个组件,用于展示层次结构的数据,常被用来构建文件系统或者数据库对象的图形化界面。在`JTree2.0`这个版本中,开发者可能引入了新的特性和优化,以...
在"Java+Swing图形界面开发与案例详解"这本书中,作者深入浅出地介绍了如何使用Swing来设计和实现GUI应用。 该书的实例代码包含了从第一讲到第八讲的源码,逐步引导读者从基础到进阶掌握Swing的使用。以下是这些讲...
**Java JTree组件详解与Instrument/JTree开源库的深度解析** 在Java的Swing图形用户界面(GUI)库中,JTree是一个强大的组件,用于显示数据的层次结构。它允许用户通过节点和子节点的形式来浏览和操作数据,通常...
5. **高级组件**:除了基础组件,Swing还提供了如JTable、JTree和JTabbedPane等高级组件,用于数据展示和多面板操作。这些组件的使用方法和自定义策略也是学习的重点。 6. **对话框和菜单**:Swing提供了内置的...
这些组件可以组合使用,创建出复杂的交互式界面。 Swing提供了模型-视图-控制器(MVC)架构,这意味着组件的行为和外观是分离的。例如,JButton有一个ActionListener接口,你可以实现这个接口来处理按钮被点击的...
8. 树形视图:JTree组件的创建和数据模型的绑定。 9. 滚动面板:如何将组件放入JScrollPane中实现滚动功能。 10. 自定义组件:如何扩展Swing组件以实现个性化功能。 11. 图形绘制:使用Graphics2D进行高级图形绘制。...
本资源——"《Java Swing图形界面开发与案例详解》源代码",显然是一个详细教程的配套源码,旨在帮助学习者深入理解和实践Swing的相关知识。 Swing组件库包含了窗口、按钮、文本框、滚动面板、菜单、表格、树形视图...
在"Java Swing图形界面开发与案例详解 .王鹏等.扫描版(前5章代码)"中,读者可以学习到以下关键知识点: 1. **基础组件**:包括JButton、JLabel、JTextField、JTextArea、JComboBox、JCheckBox、JRadioButton等基本...
10. **综合案例**: 资源中包含的综合例子程序可能涵盖了Swing的多个方面,从基础组件的使用到复杂布局的实现,再到事件处理和数据展示,这有助于读者更好地理解和掌握Swing的实战应用。 通过深入学习本资源,无论是...