标签:
次计算器可以随意增加按钮,且不影响其它的按钮,如需增加更多的计算按钮只需要修改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; } }
标签:
原文地址:http://www.cnblogs.com/qq1402876003/p/4998555.html