日期:2014-05-20  浏览次数:20653 次

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的位子