java swing jtree 什么是树的数据模型

java如何实现 树 的模型~

可以参考 javax.swing.tree 的思想 给你一点点的提示...

import java.util.*;

/** 树对象 */
public interface Tree implements Iterable{

/** 得到树根 */
TreeNode getRoot();

/** 返回迭代器(比如先根遍历整颗树) */
Iterator iterator();
}

//====

/** 树节点对象 */
public interface TreeNode {

/** 返回父节点 */
TreeNode getParent();

/** 返回孩子节点的迭代器 */
Iterator children();

boolean isRoot();

boolean isLeaf();

//...methods
}

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
/**
*
* @author 逝水
*
*/
public class JTreeDemo extends JFrame implements TreeSelectionListener{
private static final long serialVersionUID = -6209666185329417356L;
//树组件
protected JTree jTree ;

public JTreeDemo(){
init();
}
//初始化
private void init() {
jTree = new JTree();

//树节点的相关数据
DefaultMutableTreeNode root = new DefaultMutableTreeNode("三国名将");
DefaultMutableTreeNode shu = new DefaultMutableTreeNode("蜀国");
DefaultMutableTreeNode wei = new DefaultMutableTreeNode("魏国");
DefaultMutableTreeNode wu = new DefaultMutableTreeNode("吴国");
shu.add(new DefaultMutableTreeNode("关羽"));
shu.add(new DefaultMutableTreeNode("张飞"));
shu.add(new DefaultMutableTreeNode("赵云"));
shu.add(new DefaultMutableTreeNode("马超"));
shu.add(new DefaultMutableTreeNode("黄忠"));
wei.add(new DefaultMutableTreeNode("张辽"));
wei.add(new DefaultMutableTreeNode("典韦"));
wei.add(new DefaultMutableTreeNode("夏侯惇"));
wei.add(new DefaultMutableTreeNode("许褚"));
wei.add(new DefaultMutableTreeNode("徐晃"));
wu.add(new DefaultMutableTreeNode("太史慈"));
wu.add(new DefaultMutableTreeNode("甘宁"));
wu.add(new DefaultMutableTreeNode("孙策"));
wu.add(new DefaultMutableTreeNode("周瑜"));
wu.add(new DefaultMutableTreeNode("陆逊"));
root.add(shu);
root.add(wei);
root.add(wu);
//树的数据模型
DefaultTreeModel model = new DefaultTreeModel(root);
//设置数据模型
jTree.setModel(model);
// 展开所有树
for (int i = 0; i < jTree.getRowCount(); i++)
jTree.expandRow(i);
//添加事件
jTree.addTreeSelectionListener(this);
//滚动面板
JScrollPane jScrollPane = new JScrollPane(jTree,
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//添加树到滚动面板
jScrollPane.getViewport().add(jTree);
//添加滚动面板到窗口中
this.getContentPane().add(jScrollPane);
this.setTitle("JTree的事件例子");
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){
//Windows风格
//String lookAndFeel = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
//Windows Classic风格
//String lookAndFeel = "com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel";
//系统当前风格
String lookAndFeel = UIManager.getSystemLookAndFeelClassName();

try {
UIManager.setLookAndFeel(lookAndFeel);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}


JTreeDemo demo = new JTreeDemo();
demo.setVisible(true);
}

@Override
public void valueChanged(TreeSelectionEvent e) {
//获取选择的节点
DefaultMutableTreeNode node = (DefaultMutableTreeNode) jTree
.getLastSelectedPathComponent();
if(node.getLevel() == 0){

//显示提示信息
JOptionPane.showMessageDialog(null,
node.getUserObject()+": 共"+node.getChildCount()+"个国家");
}else if(node.getLevel() == 1){
//显示提示信息
JOptionPane.showMessageDialog(null,
node.getUserObject()+": 共"+node.getChildCount()+"名名将");
}else if(node.getLevel() == 2){
//显示提示信息
JOptionPane.showMessageDialog(null, node.getParent()+"名将: "+
node.getUserObject());
}
}

}

  Swing树使用人们所熟悉的文件夹和树叶图来显示分层的数据。树由节点组成,节点可以是文件夹,也可以是树叶。文件夹可以有子节点,除根节点之外的所有节点都只有一个父节点。空的文件夹与树叶的不同之处就在于它允许有子节点。
  除父节点和子节点外,树的节点还有一个用户对象(当使用DefaultTreeModel时就会呈现一个用户对象)。用户对象是Object类型,因此它提供了一个将任意对象与节点相关联的办法。
  树有一个简单的模型,每一个JTree实例都要维护对绘制器和编辑器的引用,这个绘制器和编辑器被树中所有的节点所使用。表1中列出了swing.tree包中的主要类。
  1.构建树
  DefaultMutableTreeNode root = new DefaultMutableTreeNode("World");//为了构建一个默认的树模型,必须提供一个根节点
  DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA");
  root.add(country);
  ...
  DefaultTreeModel treeModel = new DefaultTreeModel(root);//用根节点构建一个DefaultTreeModel树模型
  JTree tree = new JTree(treeModel);//用这个树模型构建一个JTree树
  或者,直接将根节点传递给JTree构造器,那么这课树会自动构建一个默认的树模型:
  JTree tree = new JTree(root);
  Container contentPane = getContentPane();
  contentPane.add(new JScrollPane(tree));

相关兴趣推荐

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网