java 什么树?java swing jtree 什么是树的数据模型
大家好,java 什么树相信很多的网友都不是很明白,包括java swing jtree 什么是树的数据模型也是一样,不过没有关系,接下来就来为大家分享关于java 什么树和java swing jtree 什么是树的数据模型的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
java swing jtree 什么是树的数据模型
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));
java 动态的给树添加新节点 望高手指点啊
//先选中节点才能增加节点
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class TreeTest implements ActionListener,TreeModelListener{
JLabel label=null;
JTree tree=null;
DefaultTreeModel treeModel=null;
String nodeName=null;//原有节点名称
public TreeTest(){
JFrame f=new JFrame("TreeTest");
Container contentPane=f.getContentPane();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("资源管理器");
tree=new JTree(root);
tree.setEditable(true);
tree.addMouseListener(new MouseHandle());
treeModel=(DefaultTreeModel)tree.getModel();
treeModel.addTreeModelListener(this);
JScrollPane scrollPane=new JScrollPane();
scrollPane.setViewportView(tree);
JPanel panel=new JPanel();
JButton b=new JButton("新增节点");
b.addActionListener(this);
panel.add(b);
b=new JButton("删除节点");
b.addActionListener(this);
panel.add(b);
b=new JButton("清除所有节点");
b.addActionListener(this);
panel.add(b);
label=new JLabel("Action");
contentPane.add(panel,BorderLayout.NORTH);
contentPane.add(scrollPane,BorderLayout.CENTER);
contentPane.add(label,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
//本方法运行新增、删除、清除所有节点的程序代码.
public void actionPerformed(ActionEvent ae){
if(ae.getActionCommand().equals("新增节点")){
DefaultMutableTreeNode parentNode=null;
DefaultMutableTreeNode newNode=new DefaultMutableTreeNode("新节点");
newNode.setAllowsChildren(true);
TreePath parentPath=tree.getSelectionPath();
//取得新节点的父节点
parentNode=(DefaultMutableTreeNode)(parentPath.getLastPathComponent());
//由DefaultTreeModel的insertNodeInto()方法增加新节点
treeModel.insertNodeInto(newNode,parentNode,parentNode.getChildCount());
//tree的scrollPathToVisible()方法在使Tree会自动展开文件夹以便显示所加入的新节点。若没加这行则加入的新节点
//会被包在文件夹中,你必须自行展开文件夹才看得到。
tree.scrollPathToVisible(new TreePath(newNode.getPath()));
label.setText("新增节点成功");
}
if(ae.getActionCommand().equals("删除节点")){
TreePath treepath=tree.getSelectionPath();
if(treepath!=null){
//下面两行取得选取节点的父节点.
DefaultMutableTreeNode selectionNode=(DefaultMutableTreeNode)treepath.getLastPathComponent();
TreeNode parent=(TreeNode)selectionNode.getParent();
if(parent!=null){
//由DefaultTreeModel的removeNodeFromParent()方法删除节点,包含它的子节点。
treeModel.removeNodeFromParent(selectionNode);
label.setText("删除节点成功");
}
}
}
if(ae.getActionCommand().equals("清除所有节点")){
//下面一行,由DefaultTreeModel的getRoot()方法取得根节点.
DefaultMutableTreeNode rootNode=(DefaultMutableTreeNode)treeModel.getRoot();
//下面一行删除所有子节点.
rootNode.removeAllChildren();
//删除完后务必运行DefaultTreeModel的reload()操作,整个Tree的节点才会真正被删除.
treeModel.reload();
label.setText("清除所有节点成功");
}
}
public void treeNodesChanged(TreeModelEvent e){
TreePath treePath=e.getTreePath();
DefaultMutableTreeNode node=(DefaultMutableTreeNode)treePath.getLastPathComponent();
try{
int[] index=e.getChildIndices();
node=(DefaultMutableTreeNode)node.getChildAt(index[0]);
}catch(NullPointerException exc){}
label.setText(nodeName+"更改数据为:"+(String)node.getUserObject());
}
public void treeNodesInserted(TreeModelEvent e){
System.out.println("new node insered");
}
public void treeNodesRemoved(TreeModelEvent e){
System.out.println("node deleted");
}
public void treeStructureChanged(TreeModelEvent e){
System.out.println("Structrue changed");
}
public static void main(String[] args){
new TreeTest();
}
class MouseHandle extends MouseAdapter{
public void mousePressed(MouseEvent e){
try{
JTree tree=(JTree)e.getSource();
int rowLocation=tree.getRowForLocation(e.getX(),e.getY());
TreePath treepath=tree.getPathForRow(rowLocation);
TreeNode treenode=(TreeNode)treepath.getLastPathComponent();
nodeName=treenode.toString();
}catch(NullPointerException ne){}
}
}
}
有一道java试题: 关于苹果树结果的。
恐惧清单
一个平凡的上班族麦克·英泰尔,37岁那年做了一年疯狂的决定,放弃他薪水优厚的记者工作,把身上仅有的3块多美元捐给街角的流浪汉,只带了干净的内衣裤,由阳光明媚的加州,靠搭便车与陌生人的仁慈,横越美国。
他的目的地是美国东海岸北卡罗莱纳州的恐怖角。
这只是他精神快崩溃时做的一个仓促决定。某个午后他忽然哭了,因为他问了自己一个问题:如果有人通知我今天死期到了,我会后悔吗?答案竟是那么肯定。虽然他有不错的工作,有美丽的女友,有至亲好友,但他发现自己这辈子从来没有下过什么赌注,平顺的人生没有高峰或谷底。
他为自己懦弱的前半生而哭。
一念之间,他选择了北卡罗莱纳州的恐怖角作为最终目的地,借以象征他征服生命中所有恐惧的决心。
他检讨自己,很诚实地为自己的恐惧开出一张清单:打小时候他就怕保姆、怕邮差、怕鸟、怕猫、怕蛇、怕蝙蝠、怕黑暗、怕大海、怕城市、怕荒野、怕热闹又怕孤独、怕失败又怕成功、怕精神崩溃……他无所不怕,却似乎“英勇”地当了记者。
这个懦弱的37岁的男人上路前竟还接到老奶奶的纸条:“你一定会在路上被人强暴。”但他成功了,4000多英里路,78顿餐,仰赖82个陌生人的仁慈。
没有接受过任何金钱的馈赠,在雷雨交加中睡在潮湿的睡袋里;也有几个像公路分尸案杀手或抢匪的家伙使他心惊胆战;在游民之家靠打工换取住宿;住过几个陌生的家庭;碰到过患有精神疾病的好心人。他终于来到恐怖角,接到女友寄给他的提款卡(他看见那个包裹时恨不得跳上柜台拥抱邮局职员。)他不是为了证明金钱无用,只是用这种正常人难以忍受的艰辛旅程来使自己面对所有恐惧。
恐惧角到了,但恐怖角并不恐怖。原来“恐怖角”这个名称,是由一位16世纪的探险家取的,本来叫“Cape Faire”,被讹写为“Cape Fear”。只是一个失误。
麦克·英泰尔终于明白:“这名字的不当,就像我自己的恐惧一样。我现在明白自己一直害怕做错事,我最大的耻辱不是恐惧死亡,而是恐惧生命。”
花了6个星期的时间,到了一个和自己想像无关的地方,他得到了什么?
得到的不是目的,而是过程。
在这里找到的:
你愿意的话自己找一下,偶懒呀!
OK,关于java 什么树和java swing jtree 什么是树的数据模型的内容到此结束了,希望对大家有所帮助。