import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class MyJsq extends JFrame
{
JTextField t=new JTextField(20); //定义一个输入框
JPanel buttonPanel=new JPanel(null); //定义一个JPanel 初始值为空
  JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bdian,bjia,bjian,bchen,bchu,bdeng,bce;
  public MyJsq()   
   { 
super(); 
init(); 
}
  public void init()
   {
   this.setLayout(new BorderLayout()); 
   this.add(t,BorderLayout.NORTH); //把输入框放到BorderLayout的上边
   this.add(getPanel(),BorderLayout.CENTER); //把一个做好的JPanel放到BorderLayout的中间
   this.setSize(300,300); 
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
   pack(); 
   this.setVisible(true); 
   } 
  private JPanel getPanel()   
  { 
if(buttonPanel==null)   

buttonPanel=new JPanel(); 
buttonPanel.setLayout(new GridLayout(4,4)); 
     b1=new JButton("1");
     b2=new JButton("2");
     b3=new JButton("3");
    b4=new JButton("4");
      b5=new JButton("5");
     b6=new JButton("6");
    b7=new JButton("7");
    b8=new JButton("8");
      b9=new JButton("9");
b0=new JButton("0");
     bdian=new JButton(".");
     bjia=new JButton("+");
     bchu=new JButton("/");
     bchen=new JButton("*");
     bdeng=new JButton("=");
     bjian=new JButton("-");
      bce=new JButton("CE");
buttonPanel.add(b7); 
buttonPanel.add(b8); 
buttonPanel.add(b9); 
buttonPanel.add(bjia); 
buttonPanel.add(b4); 
buttonPanel.add(b5); 
buttonPanel.add(b6); 
buttonPanel.add(bjian); 
buttonPanel.add(b1); 
buttonPanel.add(b2); 
buttonPanel.add(b3); 
buttonPanel.add(bchen); 
buttonPanel.add(b0); 
buttonPanel.add(bce); 
buttonPanel.add(bdeng); 
buttonPanel.add(bjia); 

return buttonPanel;  
  }
  public static void main(String[] args)   
  { 
   new MyJsq(); 
  } 
}  

解决方案 »

  1.   

    你的判断是当buttonPanel==null时才填加的按钮,
    可你的buttonpanel不是空啊。自然面板上什么都没有了。
      

  2.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class MyJsq extends JFrame
    {
    JTextField t=new JTextField(20); //定义一个输入框
    JPanel buttonPanel=new JPanel(null); //定义一个JPanel 初始值为空
      JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bdian,bjia,bjian,bchen,bchu,bdeng,bce;
      public MyJsq()   
       { 
    super(); 
    init(); 
    }
      public void init()
       {
       this.setLayout(new BorderLayout()); 
       this.add(t,BorderLayout.NORTH); //把输入框放到BorderLayout的上边
       this.add(getPanel(),BorderLayout.CENTER); //把一个做好的JPanel放到BorderLayout的中间
       this.setSize(300,300); 
       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       pack(); 
       this.setVisible(true); 
       } 
      private JPanel getPanel()   
      { 
    buttonPanel=new JPanel(); 
    buttonPanel.setLayout(new GridLayout(4,4)); 
         b1=new JButton("1");
         b2=new JButton("2");
         b3=new JButton("3");
        b4=new JButton("4");
          b5=new JButton("5");
         b6=new JButton("6");
        b7=new JButton("7");
        b8=new JButton("8");
          b9=new JButton("9");
    b0=new JButton("0");
         bdian=new JButton(".");
         bjia=new JButton("+");
         bchu=new JButton("/");
         bchen=new JButton("*");
         bdeng=new JButton("=");
         bjian=new JButton("-");
        bce=new JButton("CE"); buttonPanel.add(b7); 
    buttonPanel.add(b8); 
    buttonPanel.add(b9); 
    buttonPanel.add(bjia); 
    buttonPanel.add(b4); 
    buttonPanel.add(b5); 
    buttonPanel.add(b6); 
    buttonPanel.add(bjian); 
    buttonPanel.add(b1); 
    buttonPanel.add(b2); 
    buttonPanel.add(b3); 
    buttonPanel.add(bchen); 
    buttonPanel.add(b0); 
    buttonPanel.add(bce); 
    buttonPanel.add(bdeng); 
    buttonPanel.add(bdian); 
    buttonPanel.add(bchu);
    return buttonPanel;  
      }
      public static void main(String[] args)   
      { 
       new MyJsq(); 
      } 
    }  这是我改过的
    我定义的GridLayout是4x4
    但是显示的是4X5
      

  3.   

                buttonPanel.add(b7); 
                buttonPanel.add(b8); 
                buttonPanel.add(b9); 
                buttonPanel.add(bjia); 
                
                buttonPanel.add(b4); 
                buttonPanel.add(b5); 
                buttonPanel.add(b6); 
                buttonPanel.add(bjian);
                 
                buttonPanel.add(b1); 
                buttonPanel.add(b2); 
                buttonPanel.add(b3); 
                buttonPanel.add(bchen); 
                
                buttonPanel.add(b0); 
                buttonPanel.add(bce); 
                buttonPanel.add(bdeng); 
                buttonPanel.add(bdian); 
                
                buttonPanel.add(bchu);
                
            return buttonPanel;  你看你添加的 17个加上去了!~但是你创建了才16个 最后一个没有地方放 所以把按钮挤上去了!所以每行5个了!~
      

  4.   

    是这样的import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class MyJsq extends JFrame
    {
        JTextField t=new JTextField(20); //定义一个输入框
        JPanel buttonPanel=null; //定义一个JPanel 初始值为空
      JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bdian,bjia,bjian,bchen,bchu,bdeng,bce;
      public MyJsq()   
          { 
            super(); 
            init(); 
            }
      public void init()
          {
          this.setLayout(new BorderLayout()); 
          this.add(t,BorderLayout.NORTH); //把输入框放到BorderLayout的上边
          this.add(getPanel(),BorderLayout.CENTER); //把一个做好的JPanel放到BorderLayout的中间
          this.setSize(300,300); 
          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
          pack(); 
          this.setVisible(true); 
          } 
      private JPanel getPanel()   
      { 
            if(buttonPanel==null)   
                { 
                buttonPanel=new JPanel(); 
                buttonPanel.setLayout(new GridLayout(4,4)); 
            b1=new JButton("1");
            b2=new JButton("2");
            b3=new JButton("3");
               b4=new JButton("4");
             b5=new JButton("5");
            b6=new JButton("6");
               b7=new JButton("7");
            b8=new JButton("8");
             b9=new JButton("9");
                b0=new JButton("0");
            bdian=new JButton(".");
            bjia=new JButton("+");
            bchu=new JButton("/");
            bchen=new JButton("*");
            bdeng=new JButton("=");
            bjian=new JButton("-");
             bce=new JButton("CE");
                buttonPanel.add(b7); 
                buttonPanel.add(b8); 
                buttonPanel.add(b9); 
                buttonPanel.add(bjia); 
                buttonPanel.add(b4); 
                buttonPanel.add(b5); 
                buttonPanel.add(b6); 
                buttonPanel.add(bjian); 
                buttonPanel.add(b1); 
                buttonPanel.add(b2); 
                buttonPanel.add(b3); 
                buttonPanel.add(bchen); 
                buttonPanel.add(b0); 
                buttonPanel.add(bce); 
                buttonPanel.add(bdeng); 
                buttonPanel.add(bjia); 
                } 
            return buttonPanel;  
      }
      public static void main(String[] args)   
      { 
       new MyJsq(); 
      } 
    }