setSize函数造成混乱

时间:2014-07-01 10:55:38

标签: java swing jframe

这段代码运行得非常好。但是当我放置setSize(700,700)并运行代码时,它不会向我显示JButtons而只显示框架。我认为JButtons的网格布局可能存在一些问题,所以我将每个gridlayout的最后两个条目更改为GridLayout(3,1,300,300)。但是,结果是相同的(即没有JButton可见)。为什么会这样?

import java.awt.*;
import javax.swing.*;
public class Calculator extends JFrame
{
    JButton jb[]=new JButton[12];
    public Calculator(String title)
    {
    super(title);
    Container c;
    c=getContentPane();
    setSize(100,100);
    setVisible(true);
    Panel p1=new Panel();
    for(int h=0;h<9;h++)
    {jb[h]=new JButton(""+(h+1));}
    jb[9]=new JButton("=");
    jb[10]=new JButton(".");
    jb[11]=new JButton("0");
    p1.setLayout(new GridLayout(4,3,3,3));
    for(int h=0;h<12;h++){p1.add(jb[h]);}

    Panel p2=new Panel(new GridLayout(3,1,3,3));
    JButton jb1[]=new JButton[3];
    jb1[0]=new JButton("+");
    jb1[1]=new JButton("-");
    jb1[2]=new JButton("*");
    for(int i=0;i<3;i++){
    p2.add(jb1[i]);}


    Panel p4=new Panel(new GridLayout(3,1,3,3));
    JButton jb4[]=new JButton[3];
     jb4[0]=new JButton("%");
     jb4[1]=new JButton("/");
    jb4[2]=new JButton("-");
    for(int i=0;i<3;i++){
    p4.add(jb4[i]);}

    Panel p3=new Panel();
    JLabel jl0=new JLabel("INPUT:");
    TextField tf=new TextField(30);
    p3.add(tf);
    p3.add(jl0);    
    jl0.setLayout(new FlowLayout(FlowLayout.LEFT));

    c.add(BorderLayout.CENTER,p1);
    c.add(BorderLayout.EAST,p2);
    c.add(BorderLayout.WEST,p4);
    c.add(BorderLayout.NORTH,p3);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public static void main(String args[])
    {new Calculator("Lets calculate ! :)");}
    }

3 个答案:

答案 0 :(得分:2)

您正在使用setSize(100, 100);创建一个非常小的窗口。相反,在构造函数的末尾使用pack();以使框架适合您的面板。

答案 1 :(得分:1)

您必须在方法的末尾设置setVisible(true)(添加按钮后)。

答案 2 :(得分:1)

因为setSize()使组件层次结构无效,ref:http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#setSize%28int,%20int%29

您需要重新验证它。

为此,您最后可以再次致电revalidate();甚至setVisible(true)

最好先调用pack();,然后调用setVisible(true);,而不是在向jframe添加任何组件之前调用setVisible()