❶ 求java圖形界面樹類編程源碼舉例。類似windows資源管理器那樣的。如附圖,2層2項即可。
publicvoidinit(){
ContainercontentPane=null;
=newDefaultMutableTreeNode("我的電腦");
1=newDefaultMutableTreeNode("網路");
2=newDefaultMutableTreeNode("硬碟");
1_1=newDefaultMutableTreeNode("無限");
1_2=newDefaultMutableTreeNode("有限");
2_1=newDefaultMutableTreeNode("A");
2_2=newDefaultMutableTreeNode("B");
treeNode.add(treeNode1);
treeNode.add(treeNode2);
treeNode1.add(treeNode1_1);
treeNode1.add(treeNode1_2);
treeNode2.add(treeNode2_1);
treeNode2.add(treeNode2_2);
JTreetree=newJTree(treeNode);
contentPane=getContentPane();
JPaneljp=newJPanel();
jp.add(tree);
contentPane.add(jp);
this.setSize(300,250);
this.setLocation(400,300);
this.setVisible(true);
}
❷ Java中的屠龍之術——如何修改語法樹
JCTree作為語法樹元素的基類,包含了用於指定語法樹節點位置的pos欄位。因此,直接使用new關鍵字創建JCTree節點是無效的。結合訪問者模式,將數據結構與數據處理分離,通過上下文相關的TreeMaker工具創建語法樹節點。
TreeMaker是一個用於生成一系列語法樹節點的工具。它在創建時會自動為節點設置pos欄位,因此必須使用上下文相關的TreeMaker對象來創建節點。下面介紹幾個常用的TreeMaker方法:
TreeMaker.Modifiers
用於創建訪問標志語法樹節點(JCModifiers),通過使用枚舉類com.sun.tools.javac.code.Flags表示的flags參數,可以生成訪問標志。
TreeMaker.ClassDef
用於創建類定義語法樹節點(JCClassDecl),可以生成類的定義。
TreeMaker.MethodDef
用於創建方法定義語法樹節點(JCMethodDecl),通過返回類型restype參數指定返回類型,可以生成方法定義。
TreeMaker.VarDef
用於創建欄位/變數定義語法樹節點(JCVariableDecl),可以生成欄位或變數的定義。
TreeMaker.Ident
用於創建標識符語法樹節點(JCIdent),可以生成標識符。
TreeMaker.Return
用於創建return語句(JCReturn),可以生成return語句。
TreeMaker.Select
用於創建域訪問/方法訪問語法樹節點(JCFieldAccess),可以生成域訪問或方法訪問。
TreeMaker.NewClass
用於創建new語句語法樹節點(JCNewClass),可以生成new語句。
TreeMaker.Apply
用於創建方法調用語法樹節點(JCMethodInvocation),可以生成方法調用。
TreeMaker.Assign
用於創建賦值語句語法樹節點(JCAssign),可以生成賦值語句。
TreeMaker.Exec
用於創建可執行語句語法樹節點(JCExpressionStatement),可以生成可執行語句。
TreeMaker.Block
用於創建組合語句的語法樹節點(JCBlock),可以生成組合語句。
在操作抽象語法樹時,可能會涉及使用com.sun.tools.javac.util.List和com.sun.tools.javac.util.ListBuffer。ListBuffer類似於java.util.List,提供方便的List操作方法。
com.sun.tools.javac.util.Names
這是一個創建名稱的工具類,用於生成類、方法、參數名稱。常用方法fromString()用於創建名稱。
實戰演練部分演示了如何使用上述工具創建變數、方法、語句等。通過實踐,可以加深對抽象語法樹操作的理解。實例包括生成變數、對變數賦值、進行字元串拼接、使用++和+=語法,以及方法定義等。
總結,熟練掌握抽象語法樹操作,可以為深入理解Java編譯過程提供幫助。實踐操作是關鍵,通過實踐可以提升編程技巧和理解能力。相關代碼示例可從GitHub下載,學習生成get、set方法等。
來源:開源中國
作者:不學無數的程序員
原文:Java中的屠龍之術--如何修改語法樹 - 不學無數的程序員的個人空間 - OSCHINA
❸ java實現多叉樹的某層遍歷,求思路。一棵多叉樹有M層,子節點數不定,要求列印輸出第N層的節點。說
在Java中實現多叉樹某層節點的遍歷,通常採用遞歸的方法。從根節點開始,逐步向下訪問直到目標層。下面是一個示例代碼,展示如何列印輸出第N層的節點:
定義一個類Node,表示多叉樹的節點。每個節點包含一個名稱name和一個子節點數組children:
class Node {
private String name; // 節點名稱
private Node[] children; // 子節點
public Node(String name, Node[] children) {
this.name = name;
this.children = children;
}
// getter,setter
}
接下來定義一個方法layerX,輸入參數包括一個存儲結果的列表layer、當前節點p和要訪問的層數x:
public void layerX(List layer, Node p, int x) {
if (p != null) {
// 如果當前節點達到訪問層的節點
if (x == 1) {
layer.add(p);
}
// 繼續遞歸訪問子節點
Node[] c = p.getChildren();
if (c != null) {
for (Node n : c) {
layerX(layer, n, x - 1);
}
}
}
這個方法首先檢查當前節點是否為null,如果不是null,則進入下一步。接下來判斷當前節點是否為要訪問的層,如果是,則將該節點添加到結果列表中。然後遞歸訪問當前節點的所有子節點,遞歸層數減一。這個過程會一直持續,直到所有節點都被訪問到。
通過這種方式,可以實現對多叉樹的某層節點進行遍歷,並將結果列印輸出。這種方法具有良好的擴展性和靈活性,適用於各種復雜的多叉樹結構。
需要注意的是,上述代碼中的方法實現僅用於示例,實際使用時可能需要根據具體需求進行適當的調整和優化。