java高扩展计算器

image

次计算器可以随意增加按钮,且不影响其它的按钮,如需增加更多的计算按钮只需要修改Answer2.java中的部分代码即可:

switch(ch1)
        {
        case "=":
            
             num =  Double.parseDouble(ch[i-1]);
             zongnum=fflag(num,zongnum,flag);
             flag = 0;
            
             break;
        case "+":
            
             num =  Double.parseDouble(ch[i-1]);
            
             
             zongnum=fflag(num,zongnum,flag);
             flag = 1;
             
             break;
        case "-":
            num =  Double.parseDouble(ch[i-1]);
            
             
             zongnum=fflag(num,zongnum,flag);
            
             flag = 2;
            
             break;
        case "*":
                num =  Double.parseDouble(ch[i-1]);
            
             
             zongnum=fflag(num,zongnum,flag);
            
             flag = 3;
             
             break;
        case "/":
             num =  Double.parseDouble(ch[i-1]);
        
             zongnum=fflag(num,zongnum,flag);
             flag = 4;
            
             break;
        case "sqrt":
             num =  Double.parseDouble(ch[i-1]);
        
             zongnum=fflag(num,zongnum,flag);
             flag = 5;
            
             break;
        case"del":
            flag = 6;
            break;
//后面追加case 键值,并赋值标志变量,flag++;
            
        }
        
        
        
        
        }
        
    
        return zongnum;
    
        
    
    }
    private static double fflag(double num,double zongnum,int flag){
        switch(flag){
        
        case 0:
            zongnum=num;
            break;
        case 1:
            zongnum=zongnum+num;
            break;
        case 2:
            zongnum=zongnum-num;
            break;
        case 3:
            zongnum=zongnum*num;
            break;
        case 4:
            zongnum=zongnum/num;
            break;
        case 5:
            zongnum=Math.cbrt(zongnum);
            break;
        case 6:
            zongnum = 0;
//此处填写相应的计算代码,判断flag;
            
        break;
        }
        return zongnum;
        
        
    }

以下是源代码,有startFrame.java 和 Answer2.java 分别给出:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.InvocationTargetException;
import java.util.Vector;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
public class statrFrame extends JFrame implements ActionListener{
    private int x,y;
    private int width, height; 
    private JFrame jf;
    private JPanel contentPane;
    private JPanel panel,panel_1;
    private JTextField jt;
    private String str="",str1="",str2="";
    private String[] strindex;
    
    private Vector<JButton> bu = new Vector<>();

    public statrFrame(int width,int height,int x,int y,String str){
        
        this.strindex =str.split(",");
        this.str = str;
        this.x = x;
        this.y = y;
        this.width = width;
        this.height=height;
        jf = new JFrame("计算机");
        panel = new JPanel();
        panel_1 = new JPanel();
        jt = new JTextField();
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        jf.setContentPane(contentPane);
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addGap(42)
                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE)
                    .addGap(38))
                .addComponent(panel_1, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 422, Short.MAX_VALUE)
        );
        gl_contentPane.setVerticalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_1, GroupLayout.DEFAULT_SIZE, 202, Short.MAX_VALUE))
        );
        
        
        
        
        
        GridLayout gd = new GridLayout(x,y,0,0);
        panel_1.setLayout(gd);
        jt = new JTextField();
        jt.setColumns(10);
        GroupLayout gl_panel = new GroupLayout(panel);
        gl_panel.setHorizontalGroup(
            gl_panel.createParallelGroup(Alignment.LEADING)
                .addComponent(jt, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE)
        );
        gl_panel.setVerticalGroup(
            gl_panel.createParallelGroup(Alignment.LEADING)
                .addComponent(jt, GroupLayout.PREFERRED_SIZE, 34, GroupLayout.PREFERRED_SIZE)
        );
        panel.setLayout(gl_panel);
        contentPane.setLayout(gl_contentPane);
        if(y!=0){
            
            gd.setHgap(y);
            panel_1.setLayout(gd);
        }
            else
                panel_1.setLayout(new GridLayout());
        for(int i =0;i<strindex.length;i++){
            bu.add(new JButton(strindex[i]));
        }
        
    }
    public statrFrame(int width,int height,int x,String str){
        
        this.strindex =str.split(",");
        this.str = str;
        this.x = x;
        this.width = width;
        this.height=height;
        
        jf = new JFrame("计算机");
        panel = new JPanel();
        panel_1 = new JPanel();
        jt = new JTextField();
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        jf.setContentPane(contentPane);
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addGap(42)
                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE)
                    .addGap(38))
                .addComponent(panel_1, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 422, Short.MAX_VALUE)
        );
        gl_contentPane.setVerticalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(panel_1, GroupLayout.DEFAULT_SIZE, 202, Short.MAX_VALUE))
        );
        
        
        
        
        
        GridLayout gd = new GridLayout(x,y,0,0);
        panel_1.setLayout(gd);
        jt = new JTextField();
        jt.setColumns(10);
        GroupLayout gl_panel = new GroupLayout(panel);
        gl_panel.setHorizontalGroup(
            gl_panel.createParallelGroup(Alignment.LEADING)
                .addComponent(jt, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE)
        );
        gl_panel.setVerticalGroup(
            gl_panel.createParallelGroup(Alignment.LEADING)
                .addComponent(jt, GroupLayout.PREFERRED_SIZE, 34, GroupLayout.PREFERRED_SIZE)
        );
        panel.setLayout(gl_panel);
        contentPane.setLayout(gl_contentPane);
        if(x!=0){
            
            gd.setRows(x);
            panel_1.setLayout(gd);
        }
            else
                panel_1.setLayout(new GridLayout());
        for(int i =0;i<strindex.length;i++){
            bu.add(new JButton(strindex[i]));
            
        }
        
    }
    
    public void start(){
        for(JButton button:bu){
            JPanel panel_2= new JPanel();
            panel_2.setLayout(new FlowLayout());
            panel_1.add(panel_2);
//            button.setPreferredSize(new Dimension(130, 50));
            panel_2.add(button);
            button.setFont(new Font("微软雅黑", Font.PLAIN, 40));
            button.addActionListener(this);
            jt.setFont(new Font("宋体", Font.PLAIN, 30));
        }
        jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
        jf.setSize(width, height);
        jf.setVisible(true);
        new Adjust().start();
    }
    public static void main(String[] args) {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                
                @Override
                public void run() {
                    statrFrame sf=new statrFrame(500,600,5,"7,8,9,/,4,5,6,*,1,2,3,-,0,.,+,=,sqrt,->,del,abs");

                    sf.start();
                    
                }
            });
        } catch (InvocationTargetException | InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton jb =(JButton) e.getSource();
        
        
        
        if(jb.getText().equals("+")||jb.getText().equals("-")||jb.getText().equals("*")||jb.getText().equals("/")||jb.getText().equals("sqrt"))
        {
            str2=str2+",";
            str2=str2+jb.getText();
            str2=str2+",";
        
        str1=str1+jb.getText();
        
        
        }
        if (jb.getText().equals("="))
        {
            
            if(Answer2.suanzhi(str2) % 1.0 == 0){
                 str1 =Long.toString((long)Answer2.suanzhi(str2));
                }
            else{
                 str1 =Double.toString(Answer2.suanzhi(str2));
            }
            
            
        }
        
        if(jb.getText().equals("1")||jb.getText().equals("2")||jb.getText().equals("3")||jb.getText().equals("4")||jb.getText().equals("5")
                ||jb.getText().equals("6")||jb.getText().equals("7")||jb.getText().equals("8")||jb.getText().equals("9")
                ||jb.getText().equals("0")||jb.getText().equals("."))
        {
        
        str1=str1+jb.getText();
        
        str2=str2+jb.getText();
        }
        if (jb.getText().equals("del"))
        {
            str1 = "";
        }
        if(jb.getText().equals("->"))
        {
            str1 = str1.substring(0, str1.length()-1);
        }
        
        jt.setText(str1);
        
    }
    public  class Adjust extends Thread{
        @Override
        public void run() {
            while(true){
                jt.setPreferredSize(new Dimension(jf.getWidth()/6, jf.getHeight()/15));
            
                for(JButton button:bu){
                    
                    button.setPreferredSize(new Dimension(jf.getWidth()/7, jf.getHeight()/10));
                
            
                    
                }
            
                
            }
        }
    }
    


}
public class Answer2 {
    
    public static double  suanzhi(String str){
     double zongnum=0;
         double num=0;
         int index=0;
         int flag=0;
          String s1="";
          str=str+",=";
        
          String[] ch = str.split(",");
        
        for(int i=0;i<ch.length;i++){
            String ch1 = ch[i];
            
        switch(ch1)
        {
        case "=":
            
             num =  Double.parseDouble(ch[i-1]);
             zongnum=fflag(num,zongnum,flag);
             flag = 0;
            
             break;
        case "+":
            
             num =  Double.parseDouble(ch[i-1]);
            
             
             zongnum=fflag(num,zongnum,flag);
             flag = 1;
             
             break;
        case "-":
            num =  Double.parseDouble(ch[i-1]);
            
             
             zongnum=fflag(num,zongnum,flag);
            
             flag = 2;
            
             break;
        case "*":
                num =  Double.parseDouble(ch[i-1]);
            
             
             zongnum=fflag(num,zongnum,flag);
            
             flag = 3;
             
             break;
        case "/":
             num =  Double.parseDouble(ch[i-1]);
        
             zongnum=fflag(num,zongnum,flag);
             flag = 4;
            
             break;
        case "sqrt":
             num =  Double.parseDouble(ch[i-1]);
        
             zongnum=fflag(num,zongnum,flag);
             flag = 5;
            
             break;
        case"del":
            flag = 6;
            break;
            
        }
        
        
        
        
        }
        
    
        return zongnum;
    
        
    
    }
    private static double fflag(double num,double zongnum,int flag){
        switch(flag){
        
        case 0:
            zongnum=num;
            break;
        case 1:
            zongnum=zongnum+num;
            break;
        case 2:
            zongnum=zongnum-num;
            break;
        case 3:
            zongnum=zongnum*num;
            break;
        case 4:
            zongnum=zongnum/num;
            break;
        case 5:
            zongnum=Math.cbrt(zongnum);
            break;
        case 6:
            zongnum = 0;
            
        break;
        }
        return zongnum;
        
        
    }

    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值