在java中jpanel1使用Flowlayout布局,在其上添加一个空布局的jpanel2,jpanel2中内容为什么不能显示?

如题所述

并非不能显示,而是它们背景色相同,分辨不出罢了,你把第二个面板的背景改一下再试;

还有JPanel默认是FlowLayout布局,需要setLayout(null)才能变为空布局。追问

我在jpanel2中添加了JButton等组件,如果jpanel2使用默认布局,可以显示,当jpanel2设置为空布局时就无法显示了

追答

对啊,默认为FlowLayout布局,能够显示;设为空布局,也就是没有布局,组件是不能显示的,你需要给每个组件使用setBounds(x,y,width,height)方法设置它的位置及宽度才能显示;
你可能理解错了我的意思,我只是想告诉你,JPanel控件的默认布局不是空布局,而是FlowLayout布局,并不是让你把jpanel2设置空布局。

追问

我理解你的意思,你看下测试代码嘛,把注释取消后jpanel2就只能看到一个点,我想知道为什么会这样?(字数超出限制,代码附图)

追答

你这里有一点点问题,就是setBounds()方法只有在父容器的布局设置为null时才会起作用,你的jpanel1布局为FlowLayout,是指jpanel1中添加的子控件按FlowLayout布局器的管理方式排列,即jpanel2.setBounds()不生效,也就是说不论你第22行代码是否注释,第21行代码都是无效的;
在注释22行代码情况下,第18行代码无效,jpanel2面板布局为FlowLayout,该布局器会给子控件 jbt按钮布置位置及大小,此时也会调整jpanel2自身的大小(这个调解的大小与布局管理器的类型、子控件大小、父控件布局管理器的类型都有关,不过具体实现还未知),也就是说由默认的FlowLayout管理器给子控件及自己调解出一个合适的大小;
在未注释时,也就是启用了空布局,那么此时18行代码是有效的,但那只是规定了jbt的位置及大小,而jpanel2没有布局器,而setBounds()又无效的情况下,它的最佳尺寸则为默认值(1,1),看起来就是一个点,然后jpanel1的布局器根据这个大小给jpanel2设置一个位置,即完成布局

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答