Java编程,为什么唯一一个按钮布满整个窗体?

importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassExam1extendsJF... import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Exam1 extends JFrame{
public void creatJFrame(){
JFrame jf=new JFrame();
Container cont=jf.getContentPane();
cont.setBackground(Color.WHITE);
jf.setLocation(300,300);
jf.setVisible(true);
jf.setSize(500,500);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JLabel jl=new JLabel("Window!");
jl.setHorizontalAlignment(SwingConstants.CENTER);
cont.add(jl);
JButton jb=new JButton("Button");
jb.setMaximumSize(new Dimension(90,30));
jb.setLocation(100,100);
cont.add(jb);

}
public static void main(String[] args) {

new Exam1().creatJFrame();
}
}

尝试加上cont.setLayout(null)一加什么都没有了..
也设定过 jb.setBounds(10,10,100,21);
无济于事啊。。。求助。
展开
 我来答
e世同人
推荐于2018-03-13 · TA获得超过830个赞
知道小有建树答主
回答量:229
采纳率:87%
帮助的人:90.2万
展开全部
问题不在于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();
我的探讨
推荐于2017-12-15
知道答主
回答量:30
采纳率:0%
帮助的人:8.6万
展开全部
要设置一个布局。现在你的代码中没有设置布局管理器,所以默认是BorderLayout布局管理器。BorderLayout是这样布局的:
---------------北------------------
- -
西 中 东
- -
---------------南------------------
每一个字都是一个区域,而这些区域里面使用的是CarLayout布局,就是向区域里面添加东西的时候,组件会占满整个区域,并且后添加的组件会遮挡前面添加的组件。
单纯的使用add方法添加组件时,会默认添加当center(中)区域,调用了两次add。那么后一个组件会遮挡前一个,可以试试后一个组件添加时使用:add(组件,BorderLayout.SOUTH);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无二肆玖一
推荐于2016-07-24 · TA获得超过1046个赞
知道小有建树答主
回答量:850
采纳率:76%
帮助的人:369万
展开全部
因为你的panel窗体布局可能设置成了GridLayout(1,1,0,0);
就是网格布局。1,1代表行数和列数,即一行一列,那么里面的作为唯一的组件自然布满整个窗口。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
菜板上的鸟
2012-09-09
知道答主
回答量:26
采纳率:0%
帮助的人:12.4万
展开全部
只需加上cont.setBorderLayout(null),然后再设定jb.setBounds(10,10,100,21)即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式