亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問下在java中jtree雙擊葉節點該如何獲取該文件所在的路徑?

請問下在java中jtree雙擊葉節點該如何獲取該文件所在的路徑?

胡子哥哥 2022-01-21 19:15:16
要解決的問題:1、雙擊事件中,怎么分辨是葉節點還是目錄結點呢?2、雙擊葉結點后怎么獲得該文件所在的路徑?(因為我想用這個路徑建一個新File)
查看完整描述

3 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

// 我這里 sel 是選中的那個節點sel.isLeaf() 是葉子節點嗎? 返回boolean型sel.isroot() 是根節點嗎? 如果不是以上兩種情況就是枝節點了 要得到路徑可以 TreeNode[] a = sel.getPath(); //返回的是一個TreeNode型數組
String st = "";
for(int i=0;i<a.length;i++){
if(i!=a.length-1){
st += a[i] + "/"; //如果不是最后一個就連上一個“/ ”
}else{
st += a[i]; //最后一個即你選擇的那個就不要加“/ ”
}
}

st 則為路徑了,路徑的格式你可以適當調整一下,草草一試,可能不盡如意,請見諒!

查看完整回答
反對 回復 2022-01-23
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

創建節點時,如new DefaultMutableTreeNode(file)
然后在點擊時,就可以通過
(File) node.getUserObject();
這樣,得到創建實例時設定的File對象,就可以得到全路徑了

查看完整回答
反對 回復 2022-01-23
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

設計一個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上改動??傊琂Tree改動后,需要重新寫回文件中去將一棵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()



查看完整回答
反對 回復 2022-01-23
  • 3 回答
  • 0 關注
  • 361 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號