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)一加什么都没有了.. 展开
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)一加什么都没有了.. 展开
1个回答
展开全部
问题不在于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();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询