读书人

J2SE的关于格局管理器的疑惑

发布时间: 2012-09-28 00:03:35 作者: rapoo

J2SE的关于布局管理器的疑惑
[code=Java][/code]

package yangwei.ticket;

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class JPanelTest extends JPanel{

public JPanelTest()

{
setLayout(null);

}

public static void main(String [] args)
{
JFrame FrameTest = new JFrame();
JButton button1 = new JButton();
JButton button2 = new JButton();
button1.setBounds(50, 50, 50, 50);
button2.setBounds(100, 50, 50, 50);
JPanelTest testpanel = new JPanelTest();
//testpanel.setLayout(new FlowLayout());
testpanel.setLayout(null);
testpanel.add(button1);
testpanel.add(button2);
FrameTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FrameTest.setSize(500,500);
FrameTest.setLayout(null);//注释掉这一句Buttons就可以显示了
FrameTest.add(testpanel);
FrameTest.setVisible(true);
}

}

就比如上面这段代码当把JPanel和JFrame的布局同时设置为null时JPanel中的button就不能显示了,但如果把JFrame
中的
FrameTest.setLayout(null)
注释掉就没有问题了,请问这个是为什么呢?有人能解释下吗?

[解决办法]
setLayout(null),也即使用“无布局”或“绝对定位布局”模式。

这种情况下,布局管理器不会自动设置控件大小,所以也就没得显示了。

你需要对每个控件设置其位置与大小: setBounds()
[解决办法]
如果你把JFrame的Layout也设为NULL那么你的testpanel也要设置它所在的位置加上这句

Java code
        testpanel.setBounds(0, 0, 400, 200);//这句要添加,因为你没有设置testpanle的位子
[解决办法]
探讨

如果你把JFrame的Layout也设为NULL那么你的testpanel也要设置它所在的位置加上这句Java code
testpanel.setBounds(0, 0, 400, 200);//这句要添加,因为你没有设置testpanle的位子

读书人网 >J2SE开发

热点推荐