上次的题目有点复杂,也讲不清问题,现在把键盘的功能给取消掉了,只实现鼠标按键,但问题又出来啦,就是点击单选按钮怎样实现进制转换,以及各进制里面的加减运算,各位路过的大虾帮帮忙!!!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;public class jisuanqi extends JFrame implements ActionListener{
        private float Num1,Num2,Num; //分别用来存储运算数和结果
        private char sign;           //存储输入的运算符
        private double Num0;
        private int jingzhi;
        private int yuanjinzhi=10;
       
        //定义并初始化控件
        private JPanel p1=new JPanel();
        private JPanel p2=new JPanel();
        private JPanel p3=new JPanel();
        private JPanel p4=new JPanel();
        private JPanel p5=new JPanel();
        private JPanel p6=new JPanel();
        private JPanel p7=new JPanel();
        private JPanel p8=new JPanel();
        private JPanel p9=new JPanel();
        
    private JTextField text=new JTextField("0",20);//定义文本域初始值为0
        
        private JButton clear=new JButton("清除");
        
        private JButton b0=new JButton("0");
        private JButton b1=new JButton("1");
        private JButton b2=new JButton("2");
        private JButton b3=new JButton("3");
        private JButton b4=new JButton("4");
        private JButton b5=new JButton("5");
        private JButton b6=new JButton("6");
        private JButton b7=new JButton("7");
        private JButton b8=new JButton("8");
        private JButton b9=new JButton("9");
        private JButton a=new JButton("A");
        private JButton b=new JButton("B");
        private JButton c=new JButton("C");
        private JButton d=new JButton("D");
        private JButton e=new JButton("E");
        private JButton f=new JButton("F");
        private JButton dian=new JButton(".");
        
      
        
        private JButton cheng=new JButton("*");
        private JButton chu=new JButton("/");
        private JButton jia=new JButton("+");
        private JButton jian=new JButton("-");
        private JButton deng=new JButton("=");
         private JButton sqr=new JButton("sqrt");
        private JButton mee=new JButton("^");
        
        
    
    
         private JRadioButton ox=new JRadioButton("二进制",false);//初始
         private JRadioButton bx=new JRadioButton("八进制",false);
         private JRadioButton dx=new JRadioButton("十进制",true);
         private JRadioButton hex=new JRadioButton("十六进制",false);

解决方案 »

  1.   

    public jisuanqi(){  
                    super("计算器");
                    setResizable(false);//屏蔽最大化 
                    this.getContentPane().setLayout(new GridLayout(9,1));
                    this.getContentPane().add(p1); 
                    this.getContentPane().add(p6); 
                    this.getContentPane().add(p2); 
                    this.getContentPane().add(p3); 
                    this.getContentPane().add(p4); 
                    this.getContentPane().add(p5);
                    this.getContentPane().add(p7); 
                    this.getContentPane().add(p8); 
                    this.getContentPane().add(p9);   
                    
                    //按钮布局
                    p1.add(text);                p6.setLayout(new BorderLayout());
                    p6.add("Center",clear);
                    
                    p2.setLayout(new GridLayout(1,4));
                    p2.add(ox); p2.add(bx); p2.add(dx); p2.add(hex);
                    
                    p3.setLayout(new GridLayout(1,4));
                    p3.add(b7); p3.add(b8); p3.add(b9); p3.add(a);
                    
                    p4.setLayout(new GridLayout(1,4));
                    p4.add(b4); p4.add(b5); p4.add(b6); p4.add(b);
                    
                    p5.setLayout(new GridLayout(1,4));
                    p5.add(b1); p5.add(b2); p5.add(b3); p5.add(c);
                    
                    p7.setLayout(new GridLayout(1,4));
                    p7.add(dian); p7.add(b0); p7.add(mee); p7.add(d);
                    
                    p8.setLayout(new GridLayout(1,4));
                    p8.add(jia); p8.add(jian); p8.add(sqr); p8.add(e);
                    
                    p9.setLayout(new GridLayout(1,4));
                    p9.add(cheng); p9.add(chu); p9.add(deng);p9.add(f);
                    
                    b0.addActionListener(this);
                    b1.addActionListener(this);
                    b2.addActionListener(this);
                    b3.addActionListener(this);
                    b4.addActionListener(this);
                    b5.addActionListener(this);
                    b6.addActionListener(this);
                    b7.addActionListener(this);
                    b8.addActionListener(this);
                    b9.addActionListener(this);
                    a.addActionListener(this);
                    b.addActionListener(this);
                    c.addActionListener(this);
                    d.addActionListener(this);
                    e.addActionListener(this);
                    f.addActionListener(this);
                    
                    a.setEnabled(false); //初始
                    b.setEnabled(false); 
                    c.setEnabled(false); 
                    d.setEnabled(false); 
                    e.setEnabled(false); 
                    f.setEnabled(false);
                    
          
                   
                                   
                                    
          clear.setForeground(Color.blue);                          
          b0.setForeground(Color.blue);
          b1.setForeground( Color.blue);
          b2.setForeground( Color.blue);
          b3.setForeground( Color.blue);
          b4.setForeground( Color.blue);
          b5.setForeground( Color.blue);
          b6.setForeground( Color.blue);
          b7.setForeground( Color.blue);
          b8.setForeground( Color.blue);
          b9.setForeground( Color.blue);
          a.setForeground( Color.blue);
          b.setForeground( Color.blue);
          c.setForeground( Color.blue);
          d.setForeground( Color.blue);
          e.setForeground( Color.blue);
          f.setForeground( Color.blue);
          dian.setForeground( Color.blue);
          
          
                    clear.addActionListener(this);
                    jia.addActionListener(this);
                    jian.addActionListener(this);
                    cheng.addActionListener(this);
                    chu.addActionListener(this);
                    deng.addActionListener(this);
                    dian.addActionListener(this);
                    sqr.addActionListener(this);
                    mee.addActionListener(this);                                
         cheng.setForeground(Color.red);
         chu.setForeground(Color.red);
         jia.setForeground(Color.red);
         jian.setForeground(Color.red);
         deng.setForeground(Color.black);
         sqr.setForeground(Color.red);
         mee.setForeground(Color.red);
                                    
                    ox.addItemListener(new checkbox(2));
                    bx.addItemListener(new checkbox(8));
                    dx.addItemListener(new checkbox(10));
                    hex.addItemListener(new checkbox(16));
                        
                           ButtonGroup tk=new ButtonGroup();
                            tk.add(ox);
                            tk.add(bx);
                            tk.add(dx);
                            tk.add(hex);
                    
             ox.setForeground(Color.black);
             bx.setForeground(Color.black);
             dx.setForeground(Color.black);
             hex.setForeground(Color.black);                pack();show();
                    
                    //窗口关闭
                    addWindowListener(new WindowAdapter(){
                            public void windowClosing(WindowEvent we){
                                    System.exit(0);
                                    }
                            });
                            text.setEditable(false);//去掉文本的可编辑性
                            text.setHorizontalAlignment(text.RIGHT);//文本右对齐
                    }
      

  2.   

        public class checkbox implements ItemListener{
      int k;
        public checkbox(int kt){
    k=kt;
    }  public void itemStateChanged(ItemEvent ev) 

    //规定当进制转换时以前输入的运算符失效 
    //二进制
    if (k==2)
    {a.setEnabled(false); 
     b.setEnabled(false); 
     c.setEnabled(false); 
     d.setEnabled(false); 
     e.setEnabled(false); 
     f.setEnabled(false); 
     b9.setEnabled(false); 
     b8.setEnabled(false); 
     b7.setEnabled(false);
     b6.setEnabled(false);
     b5.setEnabled(false);
     b4.setEnabled(false);
     b3.setEnabled(false);
     b2.setEnabled(false);
     b1.setEnabled(true);
     b0.setEnabled(true);
     dian.setEnabled(false); 
     cheng.setEnabled(false); 
     chu.setEnabled(false); 
     jia.setEnabled(true);
     jian.setEnabled(true);
     sqr.setEnabled(false); 
     mee.setEnabled(false); }
     if (k==8)
    {a.setEnabled(false); 
     b.setEnabled(false); 
     c.setEnabled(false); 
     d.setEnabled(false); 
     e.setEnabled(false); 
     f.setEnabled(false); 
     b9.setEnabled(false); 
     b8.setEnabled(false); 
     b7.setEnabled(true);
     b6.setEnabled(true);
     b5.setEnabled(true);
     b4.setEnabled(true);
     b3.setEnabled(true);
     b2.setEnabled(true);
     b1.setEnabled(true);
     b0.setEnabled(true);
     dian.setEnabled(false); 
     cheng.setEnabled(false); 
     chu.setEnabled(false); 
     jia.setEnabled(true);
     jian.setEnabled(true);
     sqr.setEnabled(false); 
     mee.setEnabled(false);
     
      
     }
     if(k==10)
     {a.setEnabled(false); 
     b.setEnabled(false); 
     c.setEnabled(false); 
     d.setEnabled(false); 
     e.setEnabled(false); 
     f.setEnabled(false); 
     b9.setEnabled(true); 
     b8.setEnabled(true); 
     b7.setEnabled(true);
     b6.setEnabled(true);
     b5.setEnabled(true);
     b4.setEnabled(true);
     b3.setEnabled(true);
     b2.setEnabled(true);
     b1.setEnabled(true);
     b0.setEnabled(true);
     dian.setEnabled(true); 
     cheng.setEnabled(true); 
     chu.setEnabled(true); 
     jia.setEnabled(true);
     jian.setEnabled(true);
     sqr.setEnabled(true); 
     mee.setEnabled(true);
      }
     if(k==16)
     {a.setEnabled(true); 
     b.setEnabled(true); 
     c.setEnabled(true); 
     d.setEnabled(true); 
     e.setEnabled(true); 
     f.setEnabled(true); 
     b9.setEnabled(true); 
     b8.setEnabled(true); 
     b7.setEnabled(true);
     b6.setEnabled(true);
     b5.setEnabled(true);
     b4.setEnabled(true);
     b3.setEnabled(true);
     b2.setEnabled(true);
     b1.setEnabled(true);
     b0.setEnabled(true);
     dian.setEnabled(false); 
     cheng.setEnabled(false); 
     chu.setEnabled(false); 
     jia.setEnabled(true);
     jian.setEnabled(true);
     sqr.setEnabled(false); 
     mee.setEnabled(false);             
     
      
      }
       } 
            }
      

  3.   

          //按钮事件
           public void actionPerformed(ActionEvent e){
                    String input=e.getActionCommand();//定义input存储按钮点击产生的值
                    String str="0123456789ABCDEF";
                    String ysf="+-*^/";
                    
                    //数字输入
                      if(str.indexOf(input)>=0){
                            if(text.getText().equals("0"))
                                  {if (input=="A")
                               input="a";
                               if (input=="B")
                               input="b";
                               if (input=="C")
                               input="c";
                               if (input=="D")
                               input="d";
                               if (input=="E")
                               input="e";
                               if (input=="F")
                               input="f";
                             text.setText(input);}//若TextField中初始值为零则TextField中显示输入的数字
                            else
                                  {if (input=="A")
                               input="a";
                               if (input=="B")
                               input="b";
                               if (input=="C")
                               input="c";
                               if (input=="D")
                               input="d";
                               if (input=="E")
                               input="e";
                               if (input=="F")
                               input="f";
                              text.setText(text.getText()+input);}//如果TextField中的值不是零则叠加
                            }
                                                    
                    //小数点
                    else if(input.equals("."))
                          text.setText(text.getText()+input);
                          
                     //求开根
                     else if(input.equals("sqrt")){
                     Num0=Double.parseDouble(text.getText());
                     Num0=Math.sqrt(Num0);
                     text.setText(""+Num0);
                     }
                       
                           
                     
                    //运算符
                    else if(ysf.indexOf(input)>=0){
                            Num1=Float.parseFloat(text.getText());//输入运算符时Num1存储TextField中的值
                            text.setText("");
                            sign=ysf.charAt(ysf.indexOf(input));//sign读取输入的运算符
                            }
                    
                    //等号        
                    else if(input.equals("=")){
                            Num2=Float.parseFloat(text.getText());//Num2存储点击运算符后的数值
                            
                            switch(sign){
                                    //加法
                                    case '+':{
                                            Num=Num1+Num2;
                                            text.setText(""+Num);
                                            break;
                                            }
                                            
                                    //减法
                                    case '-':{
                                            Num=Num1-Num2;
                                            text.setText(""+Num);
                                            break;
                                            }
                                    
                                    //乘法
                                    case '*':{
                                            Num=Num1*Num2;
                                            text.setText(""+Num);
                                            break;
                                            }
                                            
                                    //除法
                                    case '/':{
                                            if(Num2==0)
                                              text.setText("除数不能为零");//除数为零,则提示除数不能为零
                                            else{
                                                    Num=Num1/Num2;
                                                    text.setText(""+Num);
                                                    break;
                                                    }
                                    
                                            }
                                      //求幂
                                     case '^':{
                                          int i=0;
                                          float s=1;
                                              for (i=1;i<=Num2;i++)
                                                  s=s*Num1;
                                                   Num=s;
                                                   text.setText(""+Num);
                                                    break;
                                   
                                                 }
                                    }
                                    
                              }    
                              
                        
                            
                            //清除
                            else if(input.equals("清除")){
                                    Num=' ';
                                    Num1=' ';
                                    Num2=' ';
                                    sign=' ';
                                    text.setText("0");
                                    }
                    }
                  
        public static void main(String args[]){
          
                    jisuanqi jsq=new jisuanqi();
                    }
            }
      

  4.   

    Integer.toStringpublic static String toString(int i, int radix);
    返回用第二个参数指定基数表示的第一个参数的字符串表示形式。 
      

  5.   

    呵呵,我笨啊,你太会,我就是想怎样实现各个进制里他们的加减发运算,
    if   (k==2) 
    {a.setEnabled(false);   
      b.setEnabled(false);   
      c.setEnabled(false);   
      d.setEnabled(false);   
      e.setEnabled(false);   
      f.setEnabled(false);   
      b9.setEnabled(false);   
      b8.setEnabled(false);   
      b7.setEnabled(false); 
      b6.setEnabled(false); 
      b5.setEnabled(false); 
      b4.setEnabled(false); 
      b3.setEnabled(false); 
      b2.setEnabled(false); 
      b1.setEnabled(true); 
      b0.setEnabled(true); 
      dian.setEnabled(false);   
      cheng.setEnabled(false);   
      chu.setEnabled(false);   
      jia.setEnabled(true); 
      jian.setEnabled(true); 
      sqr.setEnabled(false);   
      mee.setEnabled(false); 
    怎样在二进制里实现加法,减法,因为输入的都是字符型的,还有别的进制的加减法运算
    Integer.toString public   static   String   toString(int   i,   int   radix); 
    返回用第二个参数指定基数表示的第一个参数的字符串表示形式。   
    上面的是十进制转换成别的进制,那二进制转换成八,十六等进制怎么转啊?很迷茫,帮帮我把,我很需要这份程序的。
      

  6.   

    呵呵,我笨啊,你太会,我就是想怎样实现各个进制里他们的加减发运算, 
    if       (k==2)   
    {a.setEnabled(false);       
        b.setEnabled(false);       
        c.setEnabled(false);       
        d.setEnabled(false);       
        e.setEnabled(false);       
        f.setEnabled(false);       
        b9.setEnabled(false);       
        b8.setEnabled(false);       
        b7.setEnabled(false);   
        b6.setEnabled(false);   
        b5.setEnabled(false);   
        b4.setEnabled(false);   
        b3.setEnabled(false);   
        b2.setEnabled(false);   
        b1.setEnabled(true);   
        b0.setEnabled(true);   
        dian.setEnabled(false);       
        cheng.setEnabled(false);       
        chu.setEnabled(false);       
        jia.setEnabled(true);   
        jian.setEnabled(true);   
        sqr.setEnabled(false);       
        mee.setEnabled(false);   
    怎样在二进制里实现加法,减法,因为输入的都是字符型的,还有别的进制的加减法运算 Integer.toString   public static String toString(int i,int radix);   
    返回用第二个参数指定基数表示的第一个参数的字符串表示形式。  
        
    上面的是十进制转换成别的进制,那二进制转换成八,十六等进制怎么转啊?很迷茫,帮帮我把,我很需要这份程序的。
      

  7.   

    [color=#FF0000]楼上的写错了,我不太会。嘿嘿[/color]
      

  8.   

    Integer.parseIntpublic static int parseInt(String s, int radix) throws NumberFormatException
    使用第二个参数指定的基数,将字符串参数解析为有符号的整数其实对于保存在内存中的数字,没有什么进制的概念;进制只是显示上的差别;例如,在你的程序中,Num是计算结果,在进制转换过程中,这个值是可以不变的~~ 不过,在输入后,也许还是需要parseInt的;没自己实现过,不清楚细节