对控件经过一些操作后,swing设置的一些UI控件消失或者出现位置错动,添加的UI控件却看不到,不显示

bug:
在用swing做界面时,为了节约资源,我让A容器去添加c控件,然后B容器也要用到相同功能的控件,所以我直接把c控件再添加到B容器中(我这里的容器B是一个弹窗,只有点击某个按钮B容器才会弹出来)。
运行程序开始一切正常,但是当我点击某个按钮让B容器弹出来(也就是这时候B容器才开始构建,才开始添加c控件)之后刚开始并没有任何异常,随后我改变桌面大小c控件就开始在A容器中位置错动,再拉一拉JFrame窗口,c控件就消失了。
原因分析:
c控件是一个对象,开始被A容器引用,随后又被B容器引用,那么A容器刚开始的引用c控件的资源(也就是为之分配的内存数据)可能就会被回收!(但是回收时机是不确定的,我认为这也是控件没有及时消失的原因之一),之所以c控件没有在A容器中立即消失,最重要的是因为c控件显示的时候有缓存机制,所以改变窗口大小或者位置等,刷新了缓存,那么c控件就会位置错动或者消失。
解决办法:
1、不要让多个容器添加同一个控件对象。
2、如果非要这样做,那么在B容器使用退出之后,应该让A容器再次添加c控件,但是这样麻烦而且不严谨,并且操作难度很大,因为控件往往是根据添加顺序决定显示排列顺序。
推论:
我这里是B容器在操作后才弹出来,才导致c控件消失,那么我觉得一定有朋友出现过这种情况,明明添加了某个控件却不显示,那么我觉得有可能是你使用了两个容器分别添加了某一个控件对象,并且两个容器都同时(虽然并不是,但是宏观上可以这么理解)显示,那么在开始添加的控件很有可能就不会显示了,或者不就就会错动消失。
关键:
理解java对象引用,资源回收机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值