import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;public class CalculatorDemo implements ActionListener {
  InputPanel ip;
  CalculatorPanel cp;
 // static JRadioButton r1,r2,r3,r4; CalculatorDemo(){
  JFrame f = new JFrame("欢迎使用计算机");
  cp = new CalculatorPanel();
  ip = new InputPanel();
  ip.init();
  cp.init(this);
  
  f.setLayout(new BorderLayout());
  f.add(cp, BorderLayout.SOUTH);
  f.add(ip, BorderLayout.NORTH);
  f.setSize(350, 130);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  f.setVisible(true);
  System.out.print("yes");
  
 } public void actionPerformed(ActionEvent e) {
  // TODO Auto-generated method stub
  double num1 = Double.parseDouble(ip.getNum1());
   double num2 = Double.parseDouble(ip.getNum2());
   if(cp.r1.isSelected()){
   double res = num1 + num2;
   ip.t3.setText(String.valueOf(res));
   }
   if(cp.r2.isSelected()){
   double res = num1 - num2;
   ip.t3.setText(String.valueOf(res));
}
   if(cp.r3.isSelected()){
   double res = num1 * num2;
   ip.t3.setText(String.valueOf(res));
}
   if(cp.r4.isSelected()){
   double res = num1/num2;
   ip.t3.setText(String.valueOf(res));
}
  }
 
 
 public static void main(String[] args){
  CalculatorDemo cal = new CalculatorDemo();
  System.out.print(cal.ip.getNum1());
 }
}class CalculatorPanel extends InputPanel{
 JRadioButton r1, r2, r3, r4; void init(CalculatorDemo cd) {
  setLayout(new GridLayout(1, 5));
  JRadioButton r1 = new JRadioButton("加");
  JRadioButton r2 = new JRadioButton("减");
  JRadioButton r3 = new JRadioButton("乘");
  JRadioButton r4 = new JRadioButton("除");
  JButton y = new JButton("运算");
  ButtonGroup b = new ButtonGroup();
  b.add(r1);
  b.add(r2);
  b.add(r3);
  b.add(r4);
  b.add(y);
  add(r1);
  add(r2);
  add(r3);
  add(r4);
  add(y);  y.addActionListener(cd);
 } 
}class InputPanel extends JPanel {
 JTextField t1, t2, t3; void init() {
   t1 = new JTextField("", 3);
   t2 = new JTextField("", 3);
   t3 = new JTextField("", 3);
  setLayout(new GridLayout(3, 2));
  add(new JLabel("操作数1"));
  add(t1);
  add(new JLabel("操作数2"));
  add(t2);
  add(new JLabel("结果"));
  add(t3);
 } public String getNum1() {
  return t1.getText();
 } public String getNum2() {
  return t2.getText();
 }

解决方案 »

  1.   

    对图像化界面  我还停留在awt包中  
      

  2.   

    楼主,你犯了一个小小的错误:在你的CalculatorPanel 类的定义里面,定义了四个JRadioButton对象 r1, r2, r3, r4;在该类的init方法里,你是打算创建这四个对象,但是,你又重新声明了它们:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    JRadioButton r1 = new JRadioButton("加");
      JRadioButton r2 = new JRadioButton("减");
      JRadioButton r3 = new JRadioButton("乘");
      JRadioButton r4 = new JRadioButton("除");~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    这样一来,r1,r2,r3,r4代表的就是init的局部变量,而不是你的成员变量了,一旦init运行结束,它们就不复存在了!你的成员变量就是没有创建实体的空对象了。还有,你的 JButton y = new JButton("运算");语句定义的也是init内部的局部变量,它同样在init运行结束就消失了!应当把它定义为成员变量。
    把这两个地方改过来就好了。如下:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.ButtonGroup;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
    import javax.swing.JTextField;public class CalculatorDemo extends JFrame implements ActionListener {

      InputPanel ip;
      CalculatorPanel cp;
     // static JRadioButton r1,r2,r3,r4; CalculatorDemo(){
     super("欢迎使用计算机");
      cp = new CalculatorPanel();
      ip = new InputPanel();
      ip.init();
      cp.init(this);
       
      setLayout(new BorderLayout());
      add(cp, BorderLayout.SOUTH);
      add(ip, BorderLayout.NORTH);
      setSize(350, 130);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setVisible(true);
      System.out.print("yes");
       
     } public void actionPerformed(ActionEvent e) {
      // TODO Auto-generated method stub
      double num1 = Double.parseDouble(ip.getNum1());
      double num2 = Double.parseDouble(ip.getNum2());
      if(cp.r1.isSelected()){
    double res = num1 + num2;
    ip.t3.setText(String.valueOf(res));
      }
      if(cp.r2.isSelected()){
    double res = num1 - num2;
    ip.t3.setText(String.valueOf(res));
    }
      if(cp.r3.isSelected()){
    double res = num1 * num2;
    ip.t3.setText(String.valueOf(res));
    }
      if(cp.r4.isSelected()){
    double res = num1/num2;
    ip.t3.setText(String.valueOf(res));
    }
      }
      
     
     public static void main(String[] args){
      CalculatorDemo cal = new CalculatorDemo();
      System.out.print(cal.ip.getNum1());
     }
    }class CalculatorPanel extends InputPanel{
     JRadioButton r1, r2, r3, r4; JButton y;
      ButtonGroup b = new ButtonGroup(); void init(CalculatorDemo cd) {
      setLayout(new GridLayout(1, 5));
       r1 = new JRadioButton("加");
      r2 = new JRadioButton("减");
       r3 = new JRadioButton("乘");
       r4 = new JRadioButton("除");
       y = new JButton("运算");
     
      b.add(r1);
      b.add(r2);
      b.add(r3);
      b.add(r4);
     
      add(r1);
      add(r2);
      add(r3);
      add(r4);
      add(y);  y.addActionListener(cd);
     } 
    }class InputPanel extends JPanel {
     JTextField t1, t2, t3; void init() {
      t1 = new JTextField("", 3);
      t2 = new JTextField("", 3);
      t3 = new JTextField("", 3);
      setLayout(new GridLayout(3, 2));
      add(new JLabel("操作数1"));
      add(t1);
      add(new JLabel("操作数2"));
      add(t2);
      add(new JLabel("结果"));
      add(t3);
     } public String getNum1() {
      return t1.getText();
     } public String getNum2() {
      return t2.getText();
     }