❶ 求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,则进入下一步。接下来判断当前节点是否为要访问的层,如果是,则将该节点添加到结果列表中。然后递归访问当前节点的所有子节点,递归层数减一。这个过程会一直持续,直到所有节点都被访问到。
通过这种方式,可以实现对多叉树的某层节点进行遍历,并将结果打印输出。这种方法具有良好的扩展性和灵活性,适用于各种复杂的多叉树结构。
需要注意的是,上述代码中的方法实现仅用于示例,实际使用时可能需要根据具体需求进行适当的调整和优化。