• 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;
            
            
        }
    
        
    }
    欢迎关注我QQ:1402876003,加入我的IT菜鸟交流群;460062607
  • 相关阅读:
    【36氪收录】观「招商银行」隐私计算布局的思考
    如何用cmake编译
    docker | Ubuntu16.04安装与卸载docker
    通过删除注册表重新获得软件试用期
    k8s | 重启Kubernetes Pod的几种方式
    2021年终总结(一)
    凡是过往、皆为序章20210917PPT分享
    多厂商容器平台开发系统性总结
    VS2022安装.NetFramework4.0目标包的方法
    C# Winform窗体继承过程中,TableLayoutPanel是不支持继承的
  • 原文地址:https://www.cnblogs.com/qq1402876003/p/4998555.html
Copyright © 2020-2023  润新知