在使用Swing中的JTree的时候由于数据量过大,应该如何优化来减少加载时间?

时间:2023-01-28 15:29:40
如题,但是由于该树还有搜索功能,所以不可以使用多级加载的方式来做,那请问还有什么方式可以提高加载的速度呢?

14 个解决方案

#1


利用线程异步处理,这样会好些,但是lz为啥一定要在Jtree加载时就弄那么大的数据呢

#2


滚动的时候在加载。

#3


分段触发加载

#4


回复1楼:
如何进行线程异步处理?
本身数据量就很大,而且用JTree显示比较直观些。大家还有没有好办法。

#5


回复2楼3楼:
不能分段触发,因为我们实现的这个Tree还有搜索功能,可以搜索Tree中的任意节点。所以必须初始化的时候就生成好。

#6


既然有搜索,你必然要有一个完整的数据模型
但是你没必要把这个完整的数据模型直接对应到显示用的个JTree上
你可以搜索的时候在那个完整的数据模型上搜索
搜到之后,再把这个节点及其所有父节点加载到这个JTree上

#7


我想到的是,LZ是否可以使用分次加载的策略

但是,在用户搜索的时候,不是在树上搜索,而是在数据库中搜索

然后反查树节点的所有子节点。

然后再把数据展示到树上。

#8


引用 7 楼 clarck_913 的回复:
我想到的是,LZ是否可以使用分次加载的策略

但是,在用户搜索的时候,不是在树上搜索,而是在数据库中搜索

然后反查树节点的所有子节点。

然后再把数据展示到树上。
这个想法有点意思。

#9


每次点击只加载它的子节点

#10


数据量多大?

用多线程加载可以考虑一下,每一个一级子节点及其子孙节点用一个线程来处理,可以减少很多时间。搜索功能和加载方式无关,因为搜索也得等tree绘制完成之后才能进行。

#11


引用 6 楼 sunyiz 的回复:
既然有搜索,你必然要有一个完整的数据模型
但是你没必要把这个完整的数据模型直接对应到显示用的个JTree上
你可以搜索的时候在那个完整的数据模型上搜索
搜到之后,再把这个节点及其所有父节点加载到这个JTree上

这个可以有,我有个项目就是如此.
Tree中所有节点均保存在xml中,搜索是搜的xml而不是直接Tree控件,搜到节点后再加载.

#12


大家的回答都非常厉害,但是对于需求还是有些偏差,比如用户是希望既可以在树中选择节点,又可以从搜索框中搜索节点的,如果使用了6楼朋友的方案,就会对用户主动在树上选择节点造成影响的。不过还是感谢大家的积极回复,多谢。

#13


不过,貌似7楼的想法还是可以试试的,稍后回复大家测试结果

#14


引用 12 楼 caidazhao 的回复:
大家的回答都非常厉害,但是对于需求还是有些偏差,比如用户是希望既可以在树中选择节点,又可以从搜索框中搜索节点的,如果使用了6楼朋友的方案,就会对用户主动在树上选择节点造成影响的。不过还是感谢大家的积极回复,多谢。

这个为什么会影响在树上选择节点呢? 搜索用完整的数据模型,主动选择节点的话就用户点到哪加载到哪.

#1


利用线程异步处理,这样会好些,但是lz为啥一定要在Jtree加载时就弄那么大的数据呢

#2


滚动的时候在加载。

#3


分段触发加载

#4


回复1楼:
如何进行线程异步处理?
本身数据量就很大,而且用JTree显示比较直观些。大家还有没有好办法。

#5


回复2楼3楼:
不能分段触发,因为我们实现的这个Tree还有搜索功能,可以搜索Tree中的任意节点。所以必须初始化的时候就生成好。

#6


既然有搜索,你必然要有一个完整的数据模型
但是你没必要把这个完整的数据模型直接对应到显示用的个JTree上
你可以搜索的时候在那个完整的数据模型上搜索
搜到之后,再把这个节点及其所有父节点加载到这个JTree上

#7


我想到的是,LZ是否可以使用分次加载的策略

但是,在用户搜索的时候,不是在树上搜索,而是在数据库中搜索

然后反查树节点的所有子节点。

然后再把数据展示到树上。

#8


引用 7 楼 clarck_913 的回复:
我想到的是,LZ是否可以使用分次加载的策略

但是,在用户搜索的时候,不是在树上搜索,而是在数据库中搜索

然后反查树节点的所有子节点。

然后再把数据展示到树上。
这个想法有点意思。

#9


每次点击只加载它的子节点

#10


数据量多大?

用多线程加载可以考虑一下,每一个一级子节点及其子孙节点用一个线程来处理,可以减少很多时间。搜索功能和加载方式无关,因为搜索也得等tree绘制完成之后才能进行。

#11


引用 6 楼 sunyiz 的回复:
既然有搜索,你必然要有一个完整的数据模型
但是你没必要把这个完整的数据模型直接对应到显示用的个JTree上
你可以搜索的时候在那个完整的数据模型上搜索
搜到之后,再把这个节点及其所有父节点加载到这个JTree上

这个可以有,我有个项目就是如此.
Tree中所有节点均保存在xml中,搜索是搜的xml而不是直接Tree控件,搜到节点后再加载.

#12


大家的回答都非常厉害,但是对于需求还是有些偏差,比如用户是希望既可以在树中选择节点,又可以从搜索框中搜索节点的,如果使用了6楼朋友的方案,就会对用户主动在树上选择节点造成影响的。不过还是感谢大家的积极回复,多谢。

#13


不过,貌似7楼的想法还是可以试试的,稍后回复大家测试结果

#14


引用 12 楼 caidazhao 的回复:
大家的回答都非常厉害,但是对于需求还是有些偏差,比如用户是希望既可以在树中选择节点,又可以从搜索框中搜索节点的,如果使用了6楼朋友的方案,就会对用户主动在树上选择节点造成影响的。不过还是感谢大家的积极回复,多谢。

这个为什么会影响在树上选择节点呢? 搜索用完整的数据模型,主动选择节点的话就用户点到哪加载到哪.