import javax.swing.*
class TreeDemo extends JFrame
{
public TreeDemo()
{
setSize(400,300)
setTitle("演示怎样使用JTree")
show()
JScrollPane jPanel=new JScrollPane()
getContentPane().add(jPanel)
JTree jtree=new JTree()
jPanel.getViewport().add(jtree,null)
validate()
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
}
}
public class Example5_25
{
public static void main(String[] args)
{
TreeDemo frame=new TreeDemo()
}
}
其中JScrollPane是一个带滚动条的面板类。
将对象加入到带滚动条的面板类中,在将已建的数放入到其中。
就可建立一个系统默认的树结构。
//先选中节点才能增加节点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){}
}
}
}
import java.util.Stack//导入栈包public class newtree {
private newtree lchild// 声明数据成员
private newtree rchild
private char data
private newtree root
public newtree(newtree l, newtree r, char data) {// 有参构造函数进行成员赋值
lchild = l
rchild = r
this.data = data
}
public newtree() {// 无参构造函数创建树
newtree f = new newtree(null, null, 'f')
newtree g = new newtree(null, null, 'g')
newtree d = new newtree(null, null, 'd')
newtree e = new newtree(null, null, 'e')
newtree b = new newtree(d, e, 'b')
newtree c = new newtree(f, g, 'c')
newtree a = new newtree(b, c, 'a')
this.root=a
}
public void visit(newtree p) {/* 输出数据 */
System.out.print(p.data)// 访问结点
}
@SuppressWarnings("unchecked")
public void InOrder() {/* 输入数据 */
newtree p=this.root//你建了一棵树要把根节点赋值进去啊
Stack s = new Stack()
while (p != null || !s.isEmpty()) /* 处理数据:进行中序遍历 */
{
if (p != null) {
s.push(p)
p = p.lchild
} else {
p = (newtree) s.pop()
p.visit(p)//this指的是当前的类对象
p = p.rchild
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
newtree h = new newtree()// 声明变量,变量赋值
h.InOrder()
}
}
//根据你的代码改了一个
import java.util.Stack//导入栈包
public class newtree {
public Tree createTree() {// 无参构造函数创建树
Tree f = new Tree(null, null, 'f')
Tree g = new Tree(null, null, 'g')
Tree d = new Tree(null, null, 'd')
Tree e = new Tree(null, null, 'e')
Tree b = new Tree(d, e, 'b')
Tree c = new Tree(f, g, 'c')
Tree a = new Tree(b, c, 'a')
return a
}
public void InOrder(Tree p) {/* 输入数据 */
Stack<Tree> s = new Stack<Tree>()
while (p != null || !s.isEmpty()) { /* 处理数据:进行中序遍历 */
if (p != null) {
s.push(p)
p = p.lchild
} else {
p = s.pop()
System.out.print(p.data)
p = p.rchild
}
}
}
public void inOrder1(Tree p) {
if (p == null)
return
inOrder1(p.lchild)
System.out.print(p.data)
inOrder1(p.rchild)
}
public static void main(String[] args) {
newtree h = new newtree()// 声明变量,变量赋值
h.InOrder(h.createTree())
System.out.println()
h.inOrder1(h.createTree())
}
}
class Tree {
Tree lchild// 声明数据成员
Tree rchild
char data
Tree(Tree lchild, Tree rchild, char data) {
this.lchild = lchild
this.rchild = rchild
this.data = data
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)