Java编程,为什么唯一一个按钮布满整个窗体?
发布网友
发布时间:2022-04-28 20:05
我来回答
共4个回答
热心网友
时间:2022-06-23 00:58
问题不在于java,在于你没有了解java的GUI布局。
AWT和swing下的窗口(对话框)默认布局是BorderLayout,此时容器划分为上北、下南两个窄行,左西右东两个窄列,其余区域为*。在将子部件添加到容器上时,如果指定了区域,会添加到对应的区域的,如:add(button,BorderLayout.SOUTH);如不指定区域,效果是所有未使用的区域将合并为一个区域,新添加的组件在此区域。正如你代码中的添加。
而在此布局下,南北行的高度是子部件自行决定的,就是说子部件高度不变,宽度将被缩放到容器相同的宽度;东西列的子部件宽度不变,高度被缩放到容器除南北行之外的高度;*子部件的宽度高度都被缩放到容器除南北行东西列之外的宽度高度。
若想自己完全控制组件大小,则需要使用自定义布局,如别人的回答中的setLayout(null),不过必须在代码中手动设定每一个子部件的大小和位置,否则子部件使用默认大小0,0和位置0,0,子部件就看不见了。这种方法不推荐。一般是使用其它的布局。比如在窗口中对应区域加入面板,面板的默认布局是流式,将子部件加入到面板而不是窗口,这样保持了子部件的最适合大小。即:
Container c=getContentPane();
JPanel pan=new JPanel();
c.add(pan);
JButton button=new JButton("button");
pan.add(button);
另外,createJFrame方法的第一句根本没有用处,因为你的程序主类就是JFrame子类,当你的程序主类实例化时,JFrame已经潜在地实例化了,就不必另JFrame jf=new JFrame()了。
此时,你的程序主类实例就是一个JFrame,所以我给你的这些代码中getContentPane方法调用直接使用自身(父类JFrame)的方法:Container c=getContentPane();
热心网友
时间:2022-06-23 00:59
因为你的panel窗体布局可能设置成了GridLayout(1,1,0,0);
就是网格布局。1,1代表行数和列数,即一行一列,那么里面的作为唯一的组件自然布满整个窗口。
热心网友
时间:2022-06-23 00:59
要设置一个布局。现在你的代码中没有设置布局管理器,所以默认是BorderLayout布局管理器。BorderLayout是这样布局的:
---------------北------------------
- -
西 中 东
- -
---------------南------------------
每一个字都是一个区域,而这些区域里面使用的是CarLayout布局,就是向区域里面添加东西的时候,组件会占满整个区域,并且后添加的组件会遮挡前面添加的组件。
单纯的使用add方法添加组件时,会默认添加当center(中)区域,调用了两次add。那么后一个组件会遮挡前一个,可以试试后一个组件添加时使用:add(组件,BorderLayout.SOUTH);
热心网友
时间:2022-06-23 01:00
只需加上cont.setBorderLayout(null),然后再设定jb.setBounds(10,10,100,21)即可