JTree类的对象称为树组件,是常用组件之一。
DefaultMutableTreeNode节点
要想构建一个树组件,必须先为其创建结点对象。任何实现DefaultMutableTreeNode接口的类创建的对象都可以成为树上的结点。
public class Example9_21 {
public static void main(String[] args) {
TreeWin win = new TreeWin();
}
}
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.*;
public class TreeWin extends JFrame implements TreeSelectionListener {
JTree tree;
JTextArea showText;
TreeWin() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("商品");//根节点
DefaultMutableTreeNode nodeTV = new DefaultMutableTreeNode("电视机类");//节点
DefaultMutableTreeNode nodePhone = new DefaultMutableTreeNode("手机类");//节点
DefaultMutableTreeNode tv1 = new DefaultMutableTreeNode(new Goods("长虹电视", 5699));
DefaultMutableTreeNode tv2 = new DefaultMutableTreeNode(new Goods("海尔电视", 7832));
DefaultMutableTreeNode phone1 = new DefaultMutableTreeNode(new Goods("诺基亚手机", 3600));
DefaultMutableTreeNode phone2 = new DefaultMutableTreeNode(new Goods("三星手机", 2155));
root.add(nodeTV);
root.add(nodePhone);
nodeTV.add(tv1);
nodeTV.add(tv2);
nodePhone.add(phone1);
nodePhone.add(phone2);
tree = new JTree(root); //用root做根的数组件
tree.addTreeSelectionListener(this); //窗口监视树组件上的事件
showText = new JTextArea();
setLayout(new GridLayout(1,2));
add(new JScrollPane(tree));
add(new JScrollPane(showText));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBounds(80, 80, 300, 300);
validate();
}
@Override
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (node.isLeaf()) {
Goods s = (Goods) node.getUserObject(); //得到节点中存放的对象
showText.append(s.name + "," + s.price + "元\n");
} else {
showText.setText(null);
}
}
}
public class Goods {
String name;
double price;
public Goods(String n, double p) {
name = n;
price = p;
}
public String toString() { //返回对象的串表示
return name;
}
}