import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class testZ extends JFrame implements ActionListener{
  JPanel jPanel1,jPanel2;
  //JTextField resultField;
  JTextArea resultField;
  JButton s1,s2,s3,s4,s5,s6,s7,s8,s9,s0,b1,b2,b3,b4,b5,b6;
  boolean end,add,sub,mul,div;
  String str;
  double num1,num2;
 
public testZ(){
   setTitle("计算器");
   setSize(300,200);
   Container c=getContentPane();
   c.setLayout(new BorderLayout());
   //jPanel1=new JPanel(new GridLayout(1,1));
   //jPanel1.setSize(300,50);
   jPanel2=new JPanel(new GridLayout(4,4));
   //resultField=new JTextField("0");
   resultField=new JTextArea("0",20,50);//为什么用TextArea整个窗体就都变白了呢?
   //jPanel1.add(resultField);
   c.add(resultField,BorderLayout.NORTH);
   
   s1=new JButton("  1  ");  s1.addActionListener(this);
   s2=new JButton("  2  ");  s2.addActionListener(this);
   s3=new JButton("  3  ");  s3.addActionListener(this);  
   s4=new JButton("  4  ");  s4.addActionListener(this);
   s5=new JButton("  5  ");  s5.addActionListener(this);
   s6=new JButton("  6  ");  s6.addActionListener(this);
   s7=new JButton("  7  ");  s7.addActionListener(this);
   s8=new JButton("  8  ");  s8.addActionListener(this);
   s9=new JButton("  9  ");  s9.addActionListener(this);
   s0=new JButton("  0  ");  s0.addActionListener(this);
   b1=new JButton("  +  ");  b1.addActionListener(this);
   b2=new JButton("  -  ");  b2.addActionListener(this);
   b3=new JButton("  *  ");  b3.addActionListener(this);
   b4=new JButton("  /  ");  b4.addActionListener(this);
   b5=new JButton("  .  ");  b5.addActionListener(this);
   b6=new JButton("  =  ");  b6.addActionListener(this);
   jPanel2.add(s1);
   jPanel2.add(s2);
   jPanel2.add(s3);
   jPanel2.add(b1);
   jPanel2.add(s4);
   jPanel2.add(s5);
   jPanel2.add(s6);
   jPanel2.add(b2);
   jPanel2.add(s7);
   jPanel2.add(s8);
   jPanel2.add(s9);
   jPanel2.add(b3);
   jPanel2.add(s0); 
   jPanel2.add(b5);
   jPanel2.add(b6);
   jPanel2.add(b4);
   c.add(jPanel2,BorderLayout.CENTER);
   
   setVisible(true);
   }
public void num(int i){
  String s = null;
  s=String.valueOf(i);
  if(end){
   //如果数字输入结束,则将文本框置零,重新输入
    resultField.setText("0");
    end=false;
   
    }
  if((resultField.getText()).equals("0")){
   //如果文本框的内容为零,则覆盖文本框的内容
   resultField.setText(s);
   
   }
  else{
    //如果文本框的内容不为零,则在内容后面添加数字
    str = resultField.getText() + s;
    resultField.setText(str);
    
    }
 }
 
public void actionPerformed(ActionEvent e){ //数字事件
    if(e.getSource()==s1)
     num(1);
    else if(e.getSource()==s2)
    num(2);
    else if(e.getSource()==s3)
    num(3);
    else if(e.getSource()==s4)
    num(4);
    else if(e.getSource()==s5)
    num(5);
    else if(e.getSource()==s6)
    num(6);
    else if(e.getSource()==s7)
    num(7);
    else if(e.getSource()==s8)
    num(8);
    else if(e.getSource()==s9)
    num(9);
    else if(e.getSource()==s0)
    num(0);
   
    //符号事件 
    else if(e.getSource()==b1)
    sign(1);
    else if(e.getSource()==b2)
    sign(2);
    else if(e.getSource()==b3)
    sign(3);
    else if(e.getSource()==b4)
    sign(4);
    //等号
    else if(e.getSource()==b5){
    str=resultField.getText();
    if(str.indexOf(".")<=1){
     str+=".";
     resultField.setText(str);
     }
    }
    else if(e.getSource()==b6){
    num2=Double.parseDouble(resultField.getText());    if(add){
     num1=num1 + num2;}
    else if(sub){
     num1=num1 - num2;}
    else if(mul){
     num1=num1 * num2;}
    else if(div){
     num1=num1 / num2;} 
  resultField.setText(String.valueOf(num1));
  end=true;   
  }   
   
                        
  }
public void sign(int s){
   if(s==1){
    add=true;
    sub=false;
    mul=false;
    div=false;
    }
    else if(s==2){
     add=false;
     sub=true;
     mul=false;
     div=false;
     }
    else if(s==3){
     add=false;
     sub=false;
     mul=true;
     div=false;
      }
    else if(s==4){
     add=false;
     sub=false;
     mul=false;
     div=true;
     }
  num1=Double.parseDouble(resultField.getText());
  end=true;
 }   
public static void main(String[] args){
new testZ();    }
    }

解决方案 »

  1.   

    建议lz把代码中的核心部分拿出来debug,这样就不会觉得无处着手了。
    比如说又那么多个button,先不要添加那么多,这样界面简单了,也就不容易出错。然后再把相同类型的组件添加进去,这样更好些。
      

  2.   

    c.add(resultField,BorderLayout.NORTH); 改成c.add("North"resultField); 试试
      

  3.   

    resultField=new JTextArea("0",20,50);//为什么用TextArea整个窗体就都变白了呢? 
    Parameters:
    text the text to be displayed, or null
    rows the number of rows >= 0   //第二个参数代表的是文本的行数,你设成20使得文本框大于了你的窗体大小,所以就只显示了最前面的文本框,你把窗体最大化就看得到其它的了.或者把行数改小点
    columns the number of columns >= 0
      

  4.   

    JTextArea是文本区你设置的太大了所以整个都是白的了,把参数修改一下。
      

  5.   

    resultField=new JTextArea("0",20,50);//为什么用TextArea整个窗体就都变白了呢?
    把20改成1,50改成10看看