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也要设置它所在的位置加上这句
testpanel.setBounds(0, 0, 400, 200);//这句要添加,因为你没有设置testpanle的位子
[解决办法]