java高手,请指点关于dtree的问题,请大哥大姐帮忙!
直接入主题:我有一个字符串:Strings=北京社险@基金收缴@基金补缴@建筑业单位趸缴,这个字符串中,北京社险是父类,基金收缴是子类,然后基金收缴下面有建筑业单位趸缴子...
直接入主题:我有一个字符串:String s = 北京社险@基金收缴@基金补缴@建筑业单位趸缴,这个字符串中,北京社险是父类,基金收缴是子类,然后基金收缴下面有建筑业单位趸缴子类,我想问,怎么把这个字符串拼成有序的dtree,显示的效果为:
-北京社险
-基金收缴
-基金补缴
-建筑业单位趸缴
就是这样的类型,关键问题是小弟一点思路都没有,怎么才能将这些数据拼成有序的?
,请大侠帮忙!! 展开
-北京社险
-基金收缴
-基金补缴
-建筑业单位趸缴
就是这样的类型,关键问题是小弟一点思路都没有,怎么才能将这些数据拼成有序的?
,请大侠帮忙!! 展开
3个回答
展开全部
在数据层面只要整理出每一项的父项即可。
parent代表父项的id
比如
北京社险 id: 1,parent: 0
基金收缴 id: 13,parent: 1
基金补缴 id: 39,parent: 13
建筑业单位趸缴 id: 99,parent: 39
在显示时,很多GUI提供树形工具,比如swing的Jtree,直接把整理好的数据填入树形工具的接口中,就能显示出来。
如果自己画,数据量小直接递归画出树,数据量大需要建立几个引索。
parent代表父项的id
比如
北京社险 id: 1,parent: 0
基金收缴 id: 13,parent: 1
基金补缴 id: 39,parent: 13
建筑业单位趸缴 id: 99,parent: 39
在显示时,很多GUI提供树形工具,比如swing的Jtree,直接把整理好的数据填入树形工具的接口中,就能显示出来。
如果自己画,数据量小直接递归画出树,数据量大需要建立几个引索。
更多追问追答
追问
可是在数据层里怎么将这些数据给它赋一个parent这个属性呢?还有就是这些都是字符串,怎么将这些值给一个一个的赋上ID?这里有点不是太懂,请指教谢谢了
追答
parent的关系是人为制度确定的,所以也需要手工输入
id可以依次机器批量生成
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
public class Test {
static public void makeNodes(
DefaultMutableTreeNode node,int current_id,
String titles[],int parent_ids[])
{
for(int i=1;i<titles.length;i++){
System.out.println("i "+i);
if(parent_ids[i]==current_id) {
DefaultMutableTreeNode son=new DefaultMutableTreeNode(titles[i]);
System.out.println("adding "+i);
node.add(son);
makeNodes(son, i, titles, parent_ids);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(
new Runnable()
{
public void run()
{
JFrame frame = new JFrame("举例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String s = "北京社险@基金收缴@基金补缴@建筑业单位趸缴";
String titles[]=s.split("@");//以数组序号为id,
int parent_ids[]={
0,0,1,2 //【【手工确定parent关系】】
};
DefaultMutableTreeNode root=new DefaultMutableTreeNode(titles[0]);
makeNodes(root, 0, titles, parent_ids);
JTree tree=new JTree(root);
JScrollPane scrollpane = new JScrollPane(tree);
frame.add(scrollpane);
frame.pack();
frame.setVisible(true);
}
}
);
}
}
展开全部
用规则的编号去完成是最简单实现方式,一个循环就搞定节点,不需要递归(特讨厌)
0 北京社险
01 基金收缴
0101 基金补缴
010101 建筑业
02 广东
0201 广州
020101 天河区
020102 越秀区
0 北京社险
01 基金收缴
0101 基金补缴
010101 建筑业
02 广东
0201 广州
020101 天河区
020102 越秀区
追问
关键是,这些有很多的字符串,我举几个例子啊:
1、北京社险@基金收缴@基金补缴@未到位月报个人补缴
2、北京社险@基金收缴@基金补缴@单位申报月报补缴
3、北京社险@基金收缴@95年之前退费
以上是3个字符串,顺序就是这样,我能一个一个的取出第一级,第二级,第三级,第四级,你的这种方法我想过,可是我不明白怎么用实现,这些字符串应该怎么给它用规则的编号来完成?请帮帮忙吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对不起我不会
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询