⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree.java

📁 采用java技术开发的树形控件
💻 JAVA
字号:
import javax.swing.tree.*;
import java.util.*;
import javax.swing.*;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;

public class Tree extends JFrame{
  int cont=1;
  public DefaultMutableTreeNode treeDataMode=new DefaultMutableTreeNode("ksldjahfkdsl");  //定义根节点
  public DefaultTreeModel model=new DefaultTreeModel(treeDataMode);  //定义模型
  JScrollPane jScrollPane1 = new JScrollPane();
  JTree jTree1 = new JTree(model);  //定义树
  //设置选择模式
  TreeSelectionModel sm=new DefaultTreeSelectionModel();
  //
  JPopupMenu jPopupMenu1 = new JPopupMenu();
  JMenuItem jMenuItem1 = new JMenuItem();
  JMenuItem jMenuItem2 = new JMenuItem();
  JMenuItem jMenuItem3 = new JMenuItem();
  JButton jButton1 = new JButton();
  JButton jButton2 = new JButton();
  JLabel jLabel1 = new JLabel();
  JLabel jLabel2 = new JLabel();
  JButton jButton3 = new JButton();
  public Tree() {
    try {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  public static void main(String[] args) {
    Tree tree = new Tree();
    tree.setVisible(true);
  }

  private void jbInit() throws Exception {
    this.setSize(500,500);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setResizable(false);
    this.setTitle("JTree使用");
    this.getContentPane().setLayout(null);
    jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.
                                            VERTICAL_SCROLLBAR_ALWAYS);
    jScrollPane1.setBounds(new Rectangle(39, 38, 163, 347));
    jMenuItem1.setText("添加");
    jMenuItem2.setText("删除");
    jMenuItem3.setText("修改");
    jTree1.addMouseListener(new Tree_jTree1_mouseAdapter(this));
    jButton1.setBounds(new Rectangle(264, 40, 83, 25));
    jButton1.setText("添加节点");
    jButton1.addActionListener(new Tree_jButton1_actionAdapter(this));
    jButton2.setBounds(new Rectangle(266, 82, 83, 25));
    jButton2.setText("展开节点");
    jButton2.addActionListener(new Tree_jButton2_actionAdapter(this));
    jTree1.addTreeSelectionListener(new Tree_jTree1_treeSelectionAdapter(this));
    jLabel1.setText("jLabel1");
    jLabel1.setBounds(new Rectangle(221, 353, 235, 31));
    jLabel2.setText("jLabel2");
    jLabel2.setBounds(new Rectangle(221, 262, 232, 36));
    jButton3.setBounds(new Rectangle(266, 125, 83, 25));
    jButton3.setText("删除节点");
    jButton3.addActionListener(new Tree_jButton3_actionAdapter(this));
    this.getContentPane().add(jScrollPane1);
    this.getContentPane().add(jButton1);
    this.getContentPane().add(jButton2);
    this.getContentPane().add(jLabel1);
    this.getContentPane().add(jLabel2);
    this.getContentPane().add(jButton3);
    jScrollPane1.getViewport().add(jTree1);
    jPopupMenu1.add(jMenuItem1);
    jPopupMenu1.add(jMenuItem2);
    jPopupMenu1.add(jMenuItem3);
    //设置模式
    sm.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    jTree1.setSelectionModel(sm);
    //
  }

  public void viewAllNode(){  //展开树
    for(Enumeration nodes=treeDataMode.breadthFirstEnumeration();nodes.hasMoreElements();){
      DefaultMutableTreeNode node=(DefaultMutableTreeNode)nodes.nextElement();
      jTree1.expandPath(new TreePath(node.getPath()));
    }
  }
  public void addNode(String item){
    TreePath parentPath = jTree1.getSelectionPath();
    DefaultMutableTreeNode parentNode = null;
    if(parentPath==null){
      parentNode=treeDataMode;
    }
    else{
      parentNode = (DefaultMutableTreeNode)
                         (parentPath.getLastPathComponent());
    }
     Object child=new String(item);
     addItem(parentNode, child, true);
  }
  private void addItem(DefaultMutableTreeNode parent, Object child,
                       boolean b){
    DefaultMutableTreeNode childNode =
               new DefaultMutableTreeNode(child);

       if (parent == null) {
           parent = treeDataMode;
       }

       model.insertNodeInto(childNode, parent,
                                parent.getChildCount());
  }
  public void delNode(){  //删除节点
    TreePath currentSelection = jTree1.getSelectionPath();
    if (currentSelection != null) {
      DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode)
          (currentSelection.getLastPathComponent());
      MutableTreeNode parent = (MutableTreeNode) (currentNode.getParent());
      if (parent != null) {
        model.removeNodeFromParent(currentNode);
      }
    }
  }

  public void jTree1_mouseReleased(MouseEvent e) {
    if(e.isPopupTrigger()){
      jPopupMenu1.show(e.getComponent(),e.getX(),e.getY());
    }
  }

  public void myAddItem(String item){  //添加节点
    TreePath tp=jTree1.getSelectionPath();  //获得路径
    DefaultMutableTreeNode dmtn=null;  //定义一个新节点
    if(tp==null){                      //判断获得的节点是否为空
      dmtn=treeDataMode;               //如果为空就设定新节点为根节点
    }
    else{
      dmtn=(DefaultMutableTreeNode)(tp.getLastPathComponent());//如果不为空就设为当前节点
    }
    Object chil=new String(item);  //定义一个新节点值
    DefaultMutableTreeNode chileNode=new DefaultMutableTreeNode(chil);  //定义一个新节点(用于加入到树中)
    model.insertNodeInto(chileNode,dmtn,dmtn.getChildCount());  //添加节点
  }

  public void jButton1_actionPerformed(ActionEvent e) {   //添加节点
    myAddItem("节点"+"hong yu ke");
    cont++;
  }

  public void jButton2_actionPerformed(ActionEvent e) {   //展开所有节点
    viewAllNode();
  }

  public void jTree1_valueChanged(TreeSelectionEvent e) {
     Object tp[]=e.getPath().getPath();
     jLabel2.setText(tp[tp.length-1].toString()+"jkhsdfkjsd641654654"); //显示所选节点的值
     StringBuffer sb=new StringBuffer();
     for(int i=1;i<tp.length;i++){
       sb.append(tp[i]+"/");
     }
     jLabel1.setText(new String(sb)+"23132131");  //显示所选节点所经过的路径
  }

  public void jButton3_actionPerformed(ActionEvent e) {
     delNode();
  }

}

class Tree_jButton3_actionAdapter
    implements ActionListener {
  private Tree adaptee;
  Tree_jButton3_actionAdapter(Tree adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton3_actionPerformed(e);
  }
}

class Tree_jButton2_actionAdapter
    implements ActionListener {
  private Tree adaptee;
  Tree_jButton2_actionAdapter(Tree adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton2_actionPerformed(e);
  }
}

class Tree_jButton1_actionAdapter
    implements ActionListener {
  private Tree adaptee;
  Tree_jButton1_actionAdapter(Tree adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

class Tree_jTree1_mouseAdapter
    extends MouseAdapter {
  private Tree adaptee;
  Tree_jTree1_mouseAdapter(Tree adaptee) {
    this.adaptee = adaptee;
  }

  public void mouseReleased(MouseEvent e) {
    adaptee.jTree1_mouseReleased(e);
  }
}

class Tree_jTree1_treeSelectionAdapter
    implements TreeSelectionListener {
  private Tree adaptee;
  Tree_jTree1_treeSelectionAdapter(Tree adaptee) {
    this.adaptee = adaptee;
  }

  public void valueChanged(TreeSelectionEvent e) {
    adaptee.jTree1_valueChanged(e);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -