java用GUI做一个简单计算器

软件NetBeans IDE 7.0.1,需要单独写主类。

要求:有图形界面,除加减乘除外,还要实现二进制,八进制,十进制,十六进制的相互转换。

主类:

 public static void main(String[] args) {
        // TODO code application logic here
        Calculator c=new Calculator();
    }

主代码:

package newpackage;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator extends JFrame implements ActionListener{
     String num1,num2,num3,option;           
     JTextField jtf;  
     boolean flag=false; 

    public  Calculator (){         
        JFrame jf=new JFrame("计算器");
        jf.setSize(400,400);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jtf=new JTextField(20);
        JPanel jp=new JPanel();     
        JPanel jp1=new JPanel();
        jp.setLayout(new GridLayout(5,4));
        
        String a[] = {"1","2","3","4","5","6","7","8","9","0","+","-","×","÷" ,"C","."};  
        for(int i=0;i<a.length;i++){
            JButton b=new JButton(a[i]);
            jp.add(b);
            b.addActionListener(this);
        }
        String b[]={"BIN","OCT","HEX","正负","="};
        for(int i=0;i<b.length;i++){
            JButton b1=new JButton(b[i]);
            jp1.add(b1);
            b1.addActionListener(this);
        }
        jf.add(jtf,BorderLayout.NORTH);      
        jf.add(jp, BorderLayout.CENTER);   
        jf.add(jp1,BorderLayout.SOUTH);
        jf.setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        String get1=e.getActionCommand();
        
        if("0123456789".indexOf(get1)!=-1){  
            if(flag){
                String input=jtf.getText();
                jtf.setText(input+get1);
            }else{
                jtf.setText(get1);
;               flag=true;
            }
        }
        if("正负".equals(get1)){
            String a=jtf.getText();
            int b=Integer.valueOf(a);
            b=b*(-1);
            jtf.setText(Integer.toString(b));
        }
        if("+-×÷BINOCTHEX".indexOf(get1)!=-1){
            option=jtf.getText();   
            num1=get1;              
            flag=false;
        }
        if(".".equals(get1)){
            String b=jtf.getText();
            if(b.length()==0){
                 JOptionPane.showMessageDialog(this, "操作不合法!", "提示", DISPOSE_ON_CLOSE);
                 flag=true;
            }else if(b.indexOf(".")!=-1){
                JOptionPane.showMessageDialog(this, "操作不合法!", "提示", DISPOSE_ON_CLOSE);
                flag = true;

            }else{
                jtf.setText(b+".");
            }
        }
        if("C".equals(get1)){
            jtf.setText(null);
        }
        if("BIN".equals(get1)){
            num2=jtf.getText();     
            double d1=Double.parseDouble(option );
            double d2=Double.parseDouble(num2);
                  int d=(int)d1;
                  StringBuilder sb=new StringBuilder();                  
                  double r=d1-d;
                  if(r!=0){
                      int re=0,qu=0;
                  while(d!=0){
                      qu=d/2;
                      re=d%2;
                      sb.append(re);
                      d=qu;
                  }
                  sb.reverse();
                  sb.append(".");
                  int count=32;
                  double num=0;
                  while(r>0.0000000001){
                      count--;
                      if(count==0){
                        try {
                            throw new Exception("Error!");
                        } catch (Exception ex) {
                            Logger.getLogger(Calculator.class.getName()).log(Level.SEVERE, null, ex);
                        }
                      }
                      num=r*2;
                      if(num>=1){
                          sb.append(1);
                          r=num-1;
                      }else{
                          sb.append(0);
                          r=num;
                      }
                      d1=Double.parseDouble(sb.toString());
                  }
                              num2=d1+"";
            jtf.setText(num2);
            flag=false;
                  }else{
                  String a= Integer.toBinaryString(d);
                  d1= Double.parseDouble(a);
                  }                 
              }
        if("OCT".equals(get1)){     
            num2=jtf.getText();     
            double d1=Double.parseDouble(option );
            double d2=Double.parseDouble(num2);
                  int d=(int)d1;
                  StringBuilder sb=new StringBuilder();                  
                  double r=d1-d;
                  if(r!=0){
                      int re=0,qu=0;
                  while(d!=0){
                      qu=d/8;
                      re=d%8;
                      sb.append(re);
                      d=qu;
                  }
                  sb.reverse();
                  sb.append(".");
                  int count=32;
                  double num=0;
                  while(r>0.0000000001){
                      count--;
                      if(count==0){
                        try {
                            throw new Exception("Error!");
                        } catch (Exception ex) {
                            Logger.getLogger(Calculator.class.getName()).log(Level.SEVERE, null, ex);
                        }
                      }
                      num=r*8;
                      if(num>=0){
                          int a1=(int)num;
                          sb.append(a1);
                          r=num-a1;
                      }
                      d1=Double.parseDouble(sb.toString());
                  }
                              num2=d1+"";
            jtf.setText(num2);
            flag=false;
                  }else{
                      String a= Integer.toOctalString(d);
                      d1= Double.parseDouble(a);
                  }
              }
        if("HEX".equals(get1)){   
            num2=jtf.getText();     
            double d1=Double.parseDouble(option );
            double d2=Double.parseDouble(num2);
                 int d=(int)d1;
                  StringBuilder sb=new StringBuilder();                  
                  double r=d1-d;
                  if(r!=0){
                      String a= Integer.toHexString(d);
                      sb.append(a);
                  sb.reverse();
                  sb.append(".");
                  int count=32;
                  double num=0;
                  while(r>0.0000000001){
                      count--;
                      if(count==0){
                        try {
                            throw new Exception("Error!");
                        } catch (Exception ex) {
                            Logger.getLogger(Calculator.class.getName()).log(Level.SEVERE, null, ex);
                        }
                      }
                      num=r*16;
                      String a2=null;
                      if(num>=0){                         
                          int a1=(int)num;
                          if(a1==10){
                              a2="A";
                              sb.append(a2);
                          }else if(a1==11){
                              a2="B";
                          }else if(a1==12){
                              a2="C";
                          }else if(a1==13){
                              a2="D";
                          }else if(a1==14){
                              a2="E";
                          }else if(a1==15){
                              a2="F";
                          }else{
                              a2=Integer.toHexString(a1);
                          }
                          sb.append(a2);
                          r=num-a1;
                      }
                  }
                  jtf.setText(sb.toString());
                  flag=false;
                  }
                  
                  else{
                  int ff=(int)d1;
                  String a= Integer.toHexString(ff);
                  jtf.setText(a);
                  flag=false;
                  }
                  
              }
        if("=".equals(get1)){       
            num2=jtf.getText();     
            double d1=Double.parseDouble(option );
            double d2=Double.parseDouble(num2);
            if("+".equals(num1)){
                d1=d1+d2;
            }else if("×".equals(num1)){
                d1=d1*d2;
              }else if("÷".equals(num1)){
               d1=d1/d2;
              }else if("-".equals(num1)){
                  d1=d1-d2;
              }
            num2=d1+"";
            jtf.setText(num2);
            flag=false;
        }
            
        }
        
}
    

发布了14 篇原创文章 · 获赞 14 · 访问量 654

猜你喜欢

转载自blog.csdn.net/weixin_46292455/article/details/104836571
今日推荐