jtree从数据库中取数据
来源:互联网 发布:数据库概念第六版答案 编辑:程序博客网 时间:2024/06/05 02:17
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();//返回当前选取的节点对象
//返回当前展开的节点和将要展开的节点 如何展开一个节点。
//
//
//
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();
}
private TreeSelectionModel getTreeSelectionModel(){
return jtNetDevice.getSelectionModel();
}
3、根据node得到path:
TreePath visiblePath = new TreePath(getTreeModel().getPathToRoot(node));
4、根据Path展开到该节点
jtNetDevice.makeVisible(visiblePath);
5、根据path设定该节点选定
jtNetDevice.setSelectionPath(visiblePath);
6、选中节点的方法
首先,根据节点得到树路径,其中chosen为需要选中的节点
TreePath visiblePath = new TreePath( ( (DefaultTreeModel) jtNetDevice.getModel()).
getPathToRoot(chosen));
然后根据Path选中该节点
jtNetDevice.setSelectionPath(visiblePath);
7、滚动到可见位置
jtNetDevice.scrollPathToVisible(visiblePath);
8、给JTree添加右键弹出菜单
void jtNetDevice_mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
jPopupMenu1.show(e.getComponent(), e.getX(), e.getY());//弹出右键菜单
}
}
9、关于JTree的展开
// If expand is true, expands all nodes in the tree.
// Otherwise, collapses all nodes in the tree.
public void expandAll(JTree tree, boolean expand) {
TreeNode root = (TreeNode)tree.getModel().getRoot();
// Traverse tree from root
expandAll(tree, new TreePath(root), expand);
}
private void expandAll(JTree tree, TreePath parent, boolean expand) {
// Traverse children
TreeNode node = (TreeNode)parent.getLastPathComponent();
if (node.getChildCount() >= 0) {
for (Enumeration e=node.children(); e.hasMoreElements(); ) {
TreeNode n = (TreeNode)e.nextElement();
TreePath path = parent.pathByAddingChild(n);
expandAll(tree, path, expand);
}
}
// Expansion or collapse must be done bottom-up
if (expand) {
tree.expandPath(parent);
} else {
tree.collapsePath(parent);
}
}
10、如何遍历JTree
// 创建树
JTree tree = new JTree();
// 添加树节点......
// 遍历所有节点
visitAllNodes(tree);
// 仅遍历展开的节点
visitAllExpandedNodes(tree);
// Traverse all nodes in tree
public void visitAllNodes(JTree tree) {
TreeNode root = (TreeNode)tree.getModel().getRoot();
visitAllNodes(root);
}
public void visitAllNodes(TreeNode node) {
// node is visited exactly once
process(node);
if (node.getChildCount() >= 0) {
for (Enumeration e=node.children(); e.hasMoreElements(); ) {
TreeNode n = (TreeNode)e.nextElement();
visitAllNodes(n);
}
}
}
// Traverse all expanded nodes in tree
public void visitAllExpandedNodes(JTree tree) {
TreeNode root = (TreeNode)tree.getModel().getRoot();
visitAllExpandedNodes(tree, new TreePath(root));
}
public void visitAllExpandedNodes(JTree tree, TreePath parent) {
// Return if node is not expanded
if (!tree.isVisible(parent)) {
return;
}
// node is visible and is visited exactly once
TreeNode node = (TreeNode)parent.getLastPathComponent();
process(node);
// Visit all children
if (node.getChildCount() >= 0) {
for (Enumeration e=node.children(); e.hasMoreElements(); ) {
TreeNode n = (TreeNode)e.nextElement();
TreePath path = parent.pathByAddingChild(n);
visitAllExpandedNodes(tree, path);
}
}
}
- jtree从数据库中取数据
- android从数据库中取音乐数据
- 从数据库构建JTree
- 从数据库构建JTree
- Esper(二) 数据库篇 3 从数据库中取数据
- java中从数据库中取数据方法
- 从数据库取Blob数据
- Mybatis从数据库中取日期类型数据的方法
- php从数据库中取数据转换为json格式
- php+mysql mysqli_fetch_row详解 从数据库中循环取数据
- 从Settings数据库中取boolean类型数据
- jquery ztree 的使用(从数据库中取数据)
- javaEE从数据库中取数据的坑
- javaEE从数据库中取数据的坑2
- 从页面获取取数据到数据库
- jsp,从数据库取数据乱码
- java调用Weka中神经网络的算法(从数据库中取数据)
- java调用Weka中神经网络的算法(从数据库中取数据)
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
- 基础练习5_查找整数
- QQ产品界面变更之路
- SDN的初步学习总结
- ServletContextListener
- jtree从数据库中取数据
- Cadence仿真利器,Cadence SI / PI Analysis – Sigrity安装及破解指南
- 【总结】LCA小结
- 低调、奢华、有内涵的敏捷式大数据方案:Flume+Cassandra+Presto+SpagoBI
- RGB递增(递减)进行颜色变换
- storm的ack和fail<转>
- 如何使用JTree
- JVM运行时数据区
- Linux下通用打印系统CUPS使用教程