首页编程java编程java叶节点是什么(java中jtree双击叶节点如何获取该文件所在的路径)

java叶节点是什么(java中jtree双击叶节点如何获取该文件所在的路径)

编程之家 2023-10-13 102次浏览

大家好,今天来为大家分享java叶节点是什么的一些知识点,和java中jtree双击叶节点如何获取该文件所在的路径的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

java叶节点是什么(java中jtree双击叶节点如何获取该文件所在的路径)

java 动态的给树添加新节点 望高手指点啊

//先选中节点才能增加节点

import java.awt.*;

import java.awt.event.*;

java叶节点是什么(java中jtree双击叶节点如何获取该文件所在的路径)

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.tree.*;

java叶节点是什么(java中jtree双击叶节点如何获取该文件所在的路径)

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生成树中的从根到叶子节点的所有路径

方法是在dfs的过程中维护dfs的路径,到达叶子结点时将路径加入到答案中,具体见代码的注释。

输入格式为:

7A

AB

CA

DB

EB

CF

CG

其中,第一行表示结点数量n和根结点编号,第[2..n+ 1]行每行两个字符u和v,表示树边。

importjava.io.File;

importjava.io.FileNotFoundException;

importjava.util.ArrayList;

importjava.util.List;

importjava.util.Scanner;

publicclassMain{

staticfinalintmaxn=1000;

intn;//树的结点个数

charroot;//树的根

List<List<Character>>ans=newArrayList<List<Character>>();//结果,存放所有路径

boolean[][]G=newboolean[maxn][maxn];//邻接矩阵

/**

*dfs

*@paramu当前到达的结点

*@paramfa当前结点的父节点

*@parampath根到fa的路径

*/

voiddfs(charu,charfa,List<Character>path){

path.add(u);

booleanleaf=true;//u为叶子结点

for(charv='A';v<='Z';++v){

if(G[u][v]&&v!=fa){//邻接矩阵中有别的边

leaf=false;//u不是叶子结点

dfs(v,u,path);

}

}

if(leaf){//u为叶子结点,将路径加入到答案

List<Character>pt=newArrayList<Character>();

for(Characterc:path)pt.add(c);

ans.add(pt);

}

path.remove(path.size()-1);

}

publicvoidgo()throwsFileNotFoundException

{

Scannerin=newScanner(newFile("data.in"));

Strings;//进行输入的处理时的临时变量

n=in.nextInt();//获取结点个数

s=in.next();root=s.charAt(0);//获取根

for(inti=0;i<n-1;++i){

charu,v;

s=in.next();u=s.charAt(0);//获取边,并在邻接矩阵中做标记

s=in.next();v=s.charAt(0);

G[u][v]=G[v][u]=true;

}

List<Character>path=newArrayList<Character>();

dfs(root,'0',path);

for(inti=0;i<ans.size();++i){//输出答案

for(Characterc:ans.get(i))

System.out.print(c);

System.out.println();

}

in.close();

}

publicstaticvoidmain(String[]args)throwsFileNotFoundException{

newMain().go();

}

}

java中jtree双击叶节点如何获取该文件所在的路径

一个读写XML文件的类

首先必须获得XML Parser的包,可以从下面的地址获得: http://xml.apache.org/xerces2-j/index.html。

然后设计一个XMLTree的类,继承自JTree类的定义和成员变量,函数定义如下:

public class XMLTree extends JTree{ private DefaultMutableTreeNode treeNode;//JTree的根节点 private DocumentBuilderFactory dbf;//这三个成员变量是xml parser需要的 private DocumentBuilder db; private Document doc; XMLTree(String fileName);//构造函数,做初始化工作 public DefaultMutableTreeNode LoadFile(Node root);//从某个XML文件生成该树 public void SaveToFile(DefaultMutableTreeNode root,FileWriter fw);//将该树存盘成XML文件 private Node parseXml( String text)}

其中构造函数所做的初始化工作如下:

XMLTree(String fileName){ dbf= DocumentBuilderFactory.newInstance();//生成dbf的实例 db= dbf.newDocumentBuilder();//生成db的实例 treeNode= LoadFile( getXMLRoot( text));//解析该xml文件,返回JTree的根节点 setModel( new DefaultTreeModel( treeNode));//根据该根节点生成JTree}

其中,parseXml是一个返回XML文件根元素的程序,如下:

private Node getXMLRoot( String text){ ByteArrayInputStream byteStream; byteStream= new ByteArrayInputStream( text.getBytes());//将XML文件读到Stream里去 try{ doc= db.parse( byteStream);//解析该xml文件。} catch( Exception e){ e.printStackTrace();} return( Node)doc.getDocumentElement();//返回该XML文件的DOM树的根元素}

核心部分的LoadFile是一个递归过程,如下:

private DefaultMutableTreeNode createTreeNode( Node root){ DefaultMutableTreeNode treeNode= null;//定义要返回的根节点 String name= root.getNodeName();//获得该节点的NodeName String value= root.getNodeValue();//获得该节点的NodeValue treeNode= new DefaultMutableTreeNode( root. getNodeType()== Node.TEXT_NODE? value: name);//如果为值节点,那么取得该节点的值,否则取得该节点的Tag的名字 if( root.hasChildNodes())//如果该节点有孩子节点,那么递归处理该节点的孩子节点{ NodeList children= root.getChildNodes();//取得该节点的子节点列表 if( children!= null){//判断子节点是否为空 int numChildren= children.getLength();//取得字节数目 for(int i=0; i< numChildren; i++){ Node node= children.item(i);//循环处理每个子节点 if( node!= null){ if( node.getNodeType()== Node.ELEMENT_NODE){ treeNode.add( createTreeNode(node));//如果该子节点还有孩子节点使用递归的方法处理该子节点} else{ String data= node.getNodeValue(); if( data!= null){ data= data.trim(); if(!data.equals(“\n”)&&!data.equals(“\r\n”)&& data.length()> 0){ treeNode.add(new DefaultMutableTreeNode(node.getNodeValue()));//如果该节点没有孩子节点,那么直接加到节点下}}}}}}} return treeNode;//返回节点}

使用Java的Swing包里的方法能够很容易地在JTree上做改动,可以使用弹出对话框的方法,也可以直接在JTree上改动。总之,JTree改动后,需要重新写回文件中去将一棵JTree写成XML文件是一个递归的过程,方法如下:

public void SaveToFile(DefaultMutableTreeNode, FileWriter fw){try{ if(root.isLeaf()) fw.write(root.toString()+“\r\n”);//如果是叶子节点则直接将该节点输出到文件中else{//不是叶子节点的话递归输出该节点 fw.write(“<”+root.toString()+“>\r\n”); for(int i=0; i< root.getChildCount(); i++){ DefaultMutableTreeNode childNode=(DefaultMutableTreeNode) root.getChildAt(i); saveFile(childNode, fw);//递归输出该节点的所有子节点} fw.write(“</”+root.toString()+“>\r\n”);}} catch(Exception e){ e.printStackTrace();}}

必须注意的是,如果XML文件中包含中文,那么需要在调用上面的函数之前,先在文件中输入该XML文件的编码方式,方法如下:

fw.write(“<?xml version=“1.0” encoding=“GB2312”?>\r\n”);

在调用该函数结束后,还应该关闭该文件,方法是:

fw.close()

OK,关于java叶节点是什么和java中jtree双击叶节点如何获取该文件所在的路径的内容到此结束了,希望对大家有所帮助。

javaweb用什么ide,java web的开发用什么开发工具 java环境变量是什么(什么是环境变量 path变量起什么作用)