java中关于setbounds的问题
publicclassSetBoundsTestextendsJFrame{JPaneljp1,jp2;JButtonjb1,jb2;publicSetBoundsTes...
public class SetBoundsTest extends JFrame{
JPanel jp1,jp2;
JButton jb1,jb2;
public SetBoundsTest(){
jp1=new JPanel();
jp2=new JPanel();
jp1.setLayout(null);//将两个面板的布局管理器都设为空
jp2.setLayout(null);
jb2=new JButton("别点我");
jb1=new JButton("点我");
jb1.setBounds(0, 230, 100, 20);
jb2.setBounds(0, 220, 100, 20);
//按道理说上面的按钮中jb2会显示上面一半,下半部分被jp1遮住了,但结果确实jb2显示了全部,jb1不显示。
jp1.add(jb1);
jp2.add(jb2);
this.add(jp1,BorderLayout.SOUTH);
this.add(jp2);
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
SetBoundsTest setBoundsTest=new SetBoundsTest();
}
}
上面着这小段代码我试了好久,当我把空布局的panel定在frame的north,south等等,panel为什么就失去效果了???里面添加的按钮定也不显示???貌似得出个结论就是空布局panel不能被添加在边界布局的四个方位???
另外有个小问题就是setbounds里面的坐标是相对于上一级容器的还是相对于frame窗口的?求高人指点~~~~感激涕零~~ 展开
JPanel jp1,jp2;
JButton jb1,jb2;
public SetBoundsTest(){
jp1=new JPanel();
jp2=new JPanel();
jp1.setLayout(null);//将两个面板的布局管理器都设为空
jp2.setLayout(null);
jb2=new JButton("别点我");
jb1=new JButton("点我");
jb1.setBounds(0, 230, 100, 20);
jb2.setBounds(0, 220, 100, 20);
//按道理说上面的按钮中jb2会显示上面一半,下半部分被jp1遮住了,但结果确实jb2显示了全部,jb1不显示。
jp1.add(jb1);
jp2.add(jb2);
this.add(jp1,BorderLayout.SOUTH);
this.add(jp2);
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
SetBoundsTest setBoundsTest=new SetBoundsTest();
}
}
上面着这小段代码我试了好久,当我把空布局的panel定在frame的north,south等等,panel为什么就失去效果了???里面添加的按钮定也不显示???貌似得出个结论就是空布局panel不能被添加在边界布局的四个方位???
另外有个小问题就是setbounds里面的坐标是相对于上一级容器的还是相对于frame窗口的?求高人指点~~~~感激涕零~~ 展开
2个回答
展开全部
1、把layout设置为null表示该容器不使用布局管理器,也就是说加入该容器的每个组件都要设置位置和大小:setLocation,setSize,setBounds。否则组件就无法显示。
2、JFrame默认的内容窗格上会设置有 BorderLayout 管理器,因此往里面加组件时最好使用add(component,index)方法,如果直接使用add(component)就是加在CENTER处。
3、setBounds是相对于父组件,也可以称之为上一级容器。
希望能帮到你。
2、JFrame默认的内容窗格上会设置有 BorderLayout 管理器,因此往里面加组件时最好使用add(component,index)方法,如果直接使用add(component)就是加在CENTER处。
3、setBounds是相对于父组件,也可以称之为上一级容器。
希望能帮到你。
更多追问追答
追问
谢谢你,但是我上述代码中 jp1是用的this.add(jp1,BorderLayout.SOUTH)添加的,而且里面的jb1我也是使用了jb1.setBounds(0, 230, 100, 20)设置了位置和大小,但是jp1和jb1始终显示不出来,请教下大哥是怎么回事呀?而且我又试了,除了添加到CENTER的能显示出来,WEST,NORTH.SOUTH,EAST都显示不出来
追答
jb1.setBounds(0, 230, 100, 20)表示在位置(0,230)处创建,所以你看不见,可以改成jb1.setBounds(0, 0, 100, 20)试试。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询