求教Jtree的使用方法 (添加 删除 修改),
最好有完整的例子,谢了.
最好有完整的例子,谢了.
解决方案 »
- 关于oracle的PreparedStatement.getUpdateCount
- input的onclick 实现函数如何把hidden的值传递给select控件
- 设计模式重要还要数据结构算法重要?
- 如何在一个jframe中点击按钮显示另一个jframe
- Eclipse+DB2求助:无效的游标状态 SQLSTATE=24000
- 如果一个类在.jar包中,请问这个类如何获取自身的路径?
- 我的虚拟机怎么了?请高手帮忙!
- 在java中如何实现对话框?
- 关于用IE5.0浏览applet的问题,请各位高手发表意见。
- 怎样将一个GMT日期格式转换成CST时间?
- jar文件问题
- 请问?Java中有没有方法可以把分散的图片合并成一张整图呢?
*Swing中,树由扩展JComponent的JTree类来实现的。
*使用JTree的最简单和最常用的方法是创建类型为DefaultMutableTreeNode的对象,以作为树的节点
*没有子节电的的节点显示为叶
*/
/**
*DefaultMutableTreeNode root=new DefaultMutableTreeNode("根");
*DefaultMutableTreeNode child1=new DefaultMutableTreeNode("子树1");
*DefaultMutableTreeNode child2=new DefaultMutableTreeNode("子树2");
*root.add(child1);
*root.add(child2);
*JTree tree=new JTree(root);
*getContentPane().add(new JScrollPane(tree));
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.tree.*;
//选择一个字符串数组,使第一个元素成为节点,其余的元素成为叶
class Branch
{
DefaultMutableTreeNode r;
Branch(String data[])
{
r=new DefaultMutableTreeNode(data[0]);
for(int i=1;i<data.length;i++)
r.add(new DefaultMutableTreeNode(data[i]));
}
public DefaultMutableTreeNode node()
{
return r;
}
}
public class JTreeDemo extends JFrame
{
String[][]data={{"颜色","红色","蓝色","绿色"},
{"风味","酸","甜","温和"},
{"长度","短","中","长"},
{"音量","高","中","低"},
{"温度","高","中","低"},
{"强度","高","中","低"}
};
static int i=0;
DefaultMutableTreeNode root,child,chosen;
JTree tree;
DefaultTreeModel model;
JTreeDemo()
{
Container cp=getContentPane();
//创建树结构
root=new DefaultMutableTreeNode("根");
tree=new JTree(root);
//添加它并使它完成滚动的操作
cp.add(new JScrollPane(tree),BorderLayout.CENTER);
//捕获树的模型
model=(DefaultTreeModel)tree.getModel();
JButton test=new JButton("添加");
test.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//构造Branch,并返回DefaultMutableTreeNode
if (i<data.length)
child=new Branch(data[i++]).node();
//最后点击的是什么,获得最后点击的节点
chosen=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if(chosen==null)
chosen=root;
//将新节点放置在当前节点上,在chosen上添加子节点child
model.insertNodeInto(child,chosen,0);
}
});
//修改按钮的颜色
test.setBackground(Color.blue);
test.setForeground(Color.white);
JPanel p=new JPanel();
p.add(test);
cp.add(p,BorderLayout.SOUTH);
}
public static void main(String args[])
{
JTreeDemo jj=new JTreeDemo();
jj.pack();
jj.show();
}
}
但是关于节点的删除及修改部分的代码呢.
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;public class TreeEditTest
{ public static void main(String[] args)
{ JFrame frame = new TreeEditFrame();
frame.show();
}
}class TreeEditFrame extends JFrame
implements ActionListener
{ public TreeEditFrame()
{ setTitle("TreeEditTest");
setSize(300, 200);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} ); // construct tree TreeNode root = makeSampleTree();
model = new DefaultTreeModel(root);
tree = new JTree(model);
tree.setEditable(true); // add scroll pane with tree to content pane Container contentPane = getContentPane();
JScrollPane scrollPane = new JScrollPane(tree);
contentPane.add(scrollPane, "Center"); // make button panel JPanel panel = new JPanel();
addSiblingButton = new JButton("Add Sibling");
addSiblingButton.addActionListener(this);
panel.add(addSiblingButton);
addChildButton = new JButton("Add Child");
addChildButton.addActionListener(this);
panel.add(addChildButton);
deleteButton = new JButton("Delete");
deleteButton.addActionListener(this);
panel.add(deleteButton);
contentPane.add(panel, "South");
} public TreeNode makeSampleTree()
{ DefaultMutableTreeNode root
= new DefaultMutableTreeNode("World");
DefaultMutableTreeNode country
= new DefaultMutableTreeNode("USA");
root.add(country);
DefaultMutableTreeNode state
= new DefaultMutableTreeNode("California");
country.add(state);
DefaultMutableTreeNode city
= new DefaultMutableTreeNode("San Jose");
state.add(city);
city = new DefaultMutableTreeNode("Cupertino");
state.add(city);
state = new DefaultMutableTreeNode("Michigan");
country.add(state);
city = new DefaultMutableTreeNode("Ann Arbor");
state.add(city);
country = new DefaultMutableTreeNode("Germany");
root.add(country);
state = new DefaultMutableTreeNode("Schleswig-Holstein");
country.add(state);
city = new DefaultMutableTreeNode("Kiel");
state.add(city);
return root;
} public void actionPerformed(ActionEvent event)
{ DefaultMutableTreeNode selectedNode
= (DefaultMutableTreeNode)
tree.getLastSelectedPathComponent(); if (selectedNode == null) return; if (event.getSource().equals(deleteButton))
{ if (selectedNode.getParent() != null)
model.removeNodeFromParent(selectedNode);
return;
} // add new node as sibling or child DefaultMutableTreeNode newNode
= new DefaultMutableTreeNode("New"); if (event.getSource().equals(addSiblingButton))
{ DefaultMutableTreeNode parent
= (DefaultMutableTreeNode)selectedNode.getParent(); if (parent != null)
{ int selectedIndex = parent.getIndex(selectedNode);
model.insertNodeInto(newNode, parent,
selectedIndex + 1);
}
}
else if (event.getSource().equals(addChildButton))
{ model.insertNodeInto(newNode, selectedNode,
selectedNode.getChildCount());
} // now display new node TreeNode[] nodes = model.getPathToRoot(newNode);
TreePath path = new TreePath(nodes);
tree.scrollPathToVisible(path);
} private DefaultTreeModel model;
private JTree tree;
private JButton addSiblingButton;
private JButton addChildButton;
private JButton deleteButton;
private JButton editButton;
}其中包含了添加兄弟和子节点,删除节点,双击该节点就能修改。Java核心技术 卷II中的例子,有详细的解释,tree.setEditable(true)这个方法就是使树可修改,model.removeNodeFromParent(selectedNode)是删除的部分。