服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - JAVA教程 - Java Swing树状组件JTree用法实例详解

Java Swing树状组件JTree用法实例详解

2021-02-07 16:16SunnyYoona JAVA教程

这篇文章主要介绍了Java Swing树状组件JTree用法,结合具体实例形式分析了Swing组件JTree构成树状列表的节点设置与事件响应,以及自定义图形节点的相关操作技,需要的朋友可以参考下

本文实例讲述了java swing树状组件jtree用法。分享给大家供大家参考,具体如下:

一、简单样式

先看运行效果:

Java Swing树状组件JTree用法实例详解

treenodedemo.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package awtdemo;
import javax.swing.jframe;
import javax.swing.jtree;
import javax.swing.event.treeselectionevent;
import javax.swing.event.treeselectionlistener;
import javax.swing.tree.defaultmutabletreenode;
public class treenodedemo {
  public static void main(string[] args) {
    // 创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
    // public defaultmutabletreenode(object userobject)
    defaultmutabletreenode group1 = new defaultmutabletreenode("软件部");
    treenode node1 = new treenode();
    node1.setname("王雨");
    node1.setnickname("漫天飞舞");
    group1.add(new defaultmutabletreenode(node1));
    treenode node2 = new treenode();
    node2.setname("陈梦");
    node2.setnickname("梦");
    group1.add(new defaultmutabletreenode(node2));
    treenode node3 = new treenode();
    node3.setname("上官飞儿");
    node3.setnickname("飞儿");
    group1.add(new defaultmutabletreenode(node3));
    defaultmutabletreenode group2 = new defaultmutabletreenode("销售部");
    treenode node4 = new treenode();
    node4.setname("上官婉儿");
    node4.setnickname("婉儿");
    group2.add(new defaultmutabletreenode(node4));
    treenode node5 = new treenode();
    node5.setname("上官巧儿");
    node5.setnickname("巧儿");
    group2.add(new defaultmutabletreenode(node5));
    defaultmutabletreenode top = new defaultmutabletreenode("职员管理");
    top.add(group1);
    top.add(group2);
    final jtree tree = new jtree(top);
    jframe f = new jframe("jtreedemo - www.zzvips.com");
    f.add(tree);
    f.setsize(300, 300);
    f.setvisible(true);
    f.setdefaultcloseoperation(jframe.exit_on_close);
    // 添加选择事件
    tree.addtreeselectionlistener(new treeselectionlistener()
    {
      @override
      public void valuechanged(treeselectionevent e)
      {
        defaultmutabletreenode node = (defaultmutabletreenode) tree.getlastselectedpathcomponent();
        if (node == null){
          return;
        }//if
        object object = node.getuserobject();
        treenode user = (treenode) object;
        system.out.println("你选择了:" + user.tostring());
      }
    });
  }
}

treenode.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package awtdemo;
public class treenode {
  private string nickname = "";
  private string name = "";
  private string phone = "";
  private int age;
  public string getname() {
    return name;
  }
  public void setname(string name) {
    this.name = name;
  }
  public string getnickname() {
    return nickname;
  }
  public void setnickname(string nickname) {
    this.nickname = nickname;
  }
  public string getphone() {
    return phone;
  }
  public void setphone(string phone) {
    this.phone = phone;
  }
  public int getage() {
    return age;
  }
  public void setage(int age) {
    this.age = age;
  }
  // 重点在tostring,节点的显示文本就是tostring
  public string tostring()
  {
    return name + "["+nickname+"]";
  }
}

二、图标样式

运行效果:

Java Swing树状组件JTree用法实例详解

treenode.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package awtdemo;
public class treenode {
  private string nickname = "";
  private string name = "";
  private string phone = "";
  private int age;
  private string imagepath = "";
  public string getimagepath() {
    return imagepath;
  }
  public void setimagepath(string imagepath) {
    this.imagepath = imagepath;
  }
  public string getname() {
    return name;
  }
  public void setname(string name) {
    this.name = name;
  }
  public string getnickname() {
    return nickname;
  }
  public void setnickname(string nickname) {
    this.nickname = nickname;
  }
  public string getphone() {
    return phone;
  }
  public void setphone(string phone) {
    this.phone = phone;
  }
  public int getage() {
    return age;
  }
  public void setage(int age) {
    this.age = age;
  }
  // 重点在tostring,节点的显示文本就是tostring
  public string tostring()
  {
    return name + "["+nickname+"]";
  }
}

treecellrenderer.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package awtdemo;
import java.awt.component;
import javax.swing.imageicon;
import javax.swing.jtree;
import javax.swing.tree.defaultmutabletreenode;
import javax.swing.tree.defaulttreecellrenderer;
/**
 * 自定义树描述类,将树的每个节点设置成不同的图标
 *
 */
public class treecellrenderer extends defaulttreecellrenderer{
  private static final long  serialversionuid  = 1l;
  /**
   * 重写父类defaulttreecellrenderer的方法
   */
  @override
  public component gettreecellrenderercomponent(jtree tree, object value,
      boolean selected, boolean expanded, boolean isleaf, int row,boolean hasfocus)
  {
    // 选中
    if (selected)
    {
      setforeground(gettextselectioncolor());
    }
    else
    {
      setforeground(gettextnonselectioncolor());
    }
    // treenode
    defaultmutabletreenode treenode = (defaultmutabletreenode) value;
    object obj = treenode.getuserobject();
    if (obj instanceof treenode)
    {
      treenode node = (treenode) obj;
      defaulttreecellrenderer tempcellrenderer = new defaulttreecellrenderer();
      tempcellrenderer.setleaficon(new imageicon(node.getimagepath()));
      return tempcellrenderer.gettreecellrenderercomponent(tree, node.tostring(), selected, expanded, true, row, hasfocus);
    }
    else if (obj instanceof string)
    {
      string text = (string) obj;
      defaulttreecellrenderer tempcellrenderer = new defaulttreecellrenderer();
      tempcellrenderer.setopenicon(new imageicon("image/open.jpg"));
      tempcellrenderer.setclosedicon(new imageicon("image/close.jpg"));
      return tempcellrenderer.gettreecellrenderercomponent(tree, text, selected, expanded, false, row, hasfocus);
    }
    return super.gettreecellrenderercomponent(tree, value, selected, expanded, isleaf, row, hasfocus);
  }
}

treenodedemo.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package awtdemo;
import javax.swing.jframe;
import javax.swing.jtree;
import javax.swing.event.treeselectionevent;
import javax.swing.event.treeselectionlistener;
import javax.swing.tree.defaultmutabletreenode;
public class treenodedemo {
  public static void main(string[] args) {
    // 创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
    // public defaultmutabletreenode(object userobject)
    defaultmutabletreenode group1 = new defaultmutabletreenode("软件部");
    treenode node1 = new treenode();
    node1.setname("王雨");
    node1.setnickname("漫天飞舞");
    node1.setimagepath("image/1.jpg");
    group1.add(new defaultmutabletreenode(node1));
    treenode node2 = new treenode();
    node2.setname("陈梦");
    node2.setnickname("梦");
    node2.setimagepath("image/2.jpg");
    group1.add(new defaultmutabletreenode(node2));
    treenode node3 = new treenode();
    node3.setname("上官飞儿");
    node3.setnickname("飞儿");
    node3.setimagepath("image/3.jpg");
    group1.add(new defaultmutabletreenode(node3));
    defaultmutabletreenode group2 = new defaultmutabletreenode("销售部");
    treenode node4 = new treenode();
    node4.setname("上官婉儿");
    node4.setnickname("婉儿");
    node4.setimagepath("image/4.jpg");
    group2.add(new defaultmutabletreenode(node4));
    treenode node5 = new treenode();
    node5.setname("上官巧儿");
    node5.setnickname("巧儿");
    node5.setimagepath("image/5.jpg");
    group2.add(new defaultmutabletreenode(node5));
    defaultmutabletreenode root = new defaultmutabletreenode();
    root.add(group1);
    root.add(group2);
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    final jtree tree = new jtree(root);
    tree.setcellrenderer(new treecellrenderer());
    tree.putclientproperty("jtree.linestyle", "none");
    tree.setrootvisible(true);
    jframe frame = new jframe("jtreedemo - www.zzvips.com");
    frame.add(tree);
    frame.setsize(300, 300);
    frame.setvisible(true);
    frame.setdefaultcloseoperation(jframe.exit_on_close);
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // 添加选择事件
    tree.addtreeselectionlistener(new treeselectionlistener()
    {
      @override
      public void valuechanged(treeselectionevent e)
      {
        defaultmutabletreenode node = (defaultmutabletreenode) tree.getlastselectedpathcomponent();
        if (node == null){
          return;
        }//if
        object object = node.getuserobject();
        if(object instanceof treenode)
        {
          treenode user = (treenode) object;
          system.out.println("你点击了:" + user.tostring());
        }
        else if(object instanceof string)
        {
          string text = (string)object;
          system.out.println("你点击了:" + text);
        }
      }
    });
  }
}

希望本文所述对大家java程序设计有所帮助。

原文链接:http://blog.csdn.net/sunnyyoona/article/details/46292355

延伸 · 阅读

精彩推荐