創建樹以及樹的雙擊事件

package com.boomlink.design;

/**
* 樹節點屬性userObject的對象類
* @author 浪人
*
*/

public class TreeNodeObject{
  /**
    * 節點ID
    */

  String nodeId;    
  /**
    * 父輩ID
    */

  String parentId;    
  /**
    * 節點名稱
    */

  String nodeName;    
  /**
    * 包含其他信息的對象
    */

  Object userObject;    
    
  /**
    * 返回樹節點對象的顯示名稱
    */

  public String toString(){

    return nodeName;
  }
  /**
    * 返回樹節點對象的主要信息
    * @return String
    */

  public String toString2(){
    String str = "[";
    str += "{節點ID:" + nodeId + "}";
    str += ",{父輩ID:" + parentId + "}";
    str += ",{節點名稱:" + nodeName + "}";
    str += "]\n";
    return str;
  }
  public String getNodeId() {
    return nodeId;
  }
  public void setNodeId(String nodeId) {
    this.nodeId = nodeId;
  }
  public String getNodeName() {
    return nodeName;
  }
  public void setNodeName(String nodeName) {
    this.nodeName = nodeName;
  }
  public String getParentId() {
    return parentId;
  }
  public void setParentId(String parentId) {
    this.parentId = parentId;
  }
  public Object getUserObject() {
    return userObject;
  }
  public void setUserObject(Object userObject) {
    this.userObject = userObject;
  }
}
 
package com.boomlink.design;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;

import javax.swing.JOptionPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

/**
* 用一個對象列表創建一顆樹。
* @author 浪人
*
*/

public class MyTree {
  /**
    * 數據庫驅動程序類名
    */

  static String classname = "oracle.jdbc.driver.OracleDriver";
  /**
    * 訪問數據庫URL
    */

  static String url = "jdbc:oracle:thin:@192.168.1.158:1521:saledb";
  /**
    * 數據庫用戶名
    */

  static String username = "SaleUser";
  /**
    * 數據庫密碼
    */

  static String password = "SaleUser";
  /**
    * 數據庫連接
    */

  static Connection connection;
  /**
    * 加載數據庫驅動程序類,創建一個數據庫連接。
    */

  static {
    try{
      Class.forName(classname);
    }catch(ClassNotFoundException ex){
      ex.printStackTrace();
    }
    try {
      connection = DriverManager.getConnection(url, username, password);
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
  /**
    * 對象列表
    */

  List<TreeNodeObject> treeDataList;
  /**
    * JTree
    */

  JTree jtree;
  /**
    * 構造方法
    */

  public MyTree(){
    treeDataList = getTreeData();
    DefaultMutableTreeNode root = new DefaultMutableTreeNode();
    jtree = new JTree(root);
    addChildren(root, "root");
    addClickEvent(jtree);
  }
  /**
    * 給樹節點添加孩子
    * @param node DefaultMutableTreeNode
    * @param nodeId String
    */

  public void addChildren(DefaultMutableTreeNode node, String nodeId){
    /* 遞歸爲樹節點添加孩子。將treeDataList中元素的父輩ID值等於參數nodeId值的元素對象創建一個樹節點,並作爲參數node的孩子。 */
    DefaultMutableTreeNode treeNode;
    TreeNodeObject tno;
    String curParentId;
    String curNodeId;
    for(int i = 0; i < treeDataList.size(); i++){
      tno = treeDataList.get(i);
      curParentId = tno.getParentId();
      curNodeId =tno.getNodeId();
      if(!curParentId.equals(nodeId))continue;
      treeNode = new DefaultMutableTreeNode();
      treeNode.setUserObject(tno);
      node.add(treeNode);
      jtree.updateUI();
      addChildren(treeNode, curNodeId);
    }
  }
  /**
    * 給JTree添加鼠標事件
    * @param jtree JTree
    */

  public void addClickEvent(final JTree jtree){
    jtree.addMouseListener(new MouseListener(){
      public void mouseClicked(MouseEvent e) {
        /* 當鼠標雙擊事件被觸發時,調用alert方法顯示樹節點的userObject值。 */
        int row = jtree.getRowForLocation(e.getX(), e.getY());
        if(row == -1) return;
        if(e.getClickCount() == 1) return;
        DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)jtree.getLastSelectedPathComponent();
        TreeNodeObject tno = (TreeNodeObject)treeNode.getUserObject();
        alert(tno.toString2());
      }
      public void mouseEntered(MouseEvent e) {}
      public void mouseExited(MouseEvent e) {}
      public void mousePressed(MouseEvent e) {}
      public void mouseReleased(MouseEvent e) {}
    });
  }
  /**
    * 在消息對話框中顯示信息
    * @param msg String
    */

  public void alert(String msg) {
    JOptionPane.showMessageDialog(null, msg, "提示",  JOptionPane.INFORMATION_MESSAGE);
  }
  /**
    * Get JTree
    * @return JTree
    */

  public JTree getJTree(){
    return jtree;
  }
  /**
    * 從數據庫中獲取數據存儲在TreeNodeObject類的對象列表中
    * @return List
    */

  public List<TreeNodeObject> getTreeData(){
    List<TreeNodeObject> list = new LinkedList<TreeNodeObject>();
    TreeNodeObject tno;
    String sql = "select * from userprivilege t where userid = '14'";
    Connection conn = connection;
    try{
      Statement stmt = conn.createStatement();
      ResultSet rs = stmt.executeQuery(sql);
      while(rs.next()){
        tno = new TreeNodeObject();
        tno.setNodeId(rs.getString("MODELID"));
        tno.setParentId(rs.getString("PARENTID"));
        tno.setNodeName(rs.getString("MODELNAME"));
        list.add(tno);
      }
      rs.close();
      stmt.close();
    }catch(SQLException e){
      e.printStackTrace();
    }
    return list;
  }
  /**
    * 入口方法
    * @param args String[]
    */

  public static void main(String[] args){
    new MyTree();
  }
}
 
MyTree使用:
    jtree = new MyTree().getJTree();
    jp.setLayout(new BorderLayout());
    jp.add(new JScrollPane(jtree));
 
展示界面見附件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章