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);
无济于事啊。。。求助。 展开
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);
无济于事啊。。。求助。 展开
4个回答
展开全部
问题不在于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();
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();
展开全部
要设置一个布局。现在你的代码中没有设置布局管理器,所以默认是BorderLayout布局管理器。BorderLayout是这样布局的:
---------------北------------------
- -
西 中 东
- -
---------------南------------------
每一个字都是一个区域,而这些区域里面使用的是CarLayout布局,就是向区域里面添加东西的时候,组件会占满整个区域,并且后添加的组件会遮挡前面添加的组件。
单纯的使用add方法添加组件时,会默认添加当center(中)区域,调用了两次add。那么后一个组件会遮挡前一个,可以试试后一个组件添加时使用:add(组件,BorderLayout.SOUTH);
---------------北------------------
- -
西 中 东
- -
---------------南------------------
每一个字都是一个区域,而这些区域里面使用的是CarLayout布局,就是向区域里面添加东西的时候,组件会占满整个区域,并且后添加的组件会遮挡前面添加的组件。
单纯的使用add方法添加组件时,会默认添加当center(中)区域,调用了两次add。那么后一个组件会遮挡前一个,可以试试后一个组件添加时使用:add(组件,BorderLayout.SOUTH);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的panel窗体布局可能设置成了GridLayout(1,1,0,0);
就是网格布局。1,1代表行数和列数,即一行一列,那么里面的作为唯一的组件自然布满整个窗口。
就是网格布局。1,1代表行数和列数,即一行一列,那么里面的作为唯一的组件自然布满整个窗口。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只需加上cont.setBorderLayout(null),然后再设定jb.setBounds(10,10,100,21)即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询