程序思路
1.界面设计
首先创建Frame容器,textField文本框,Jpanel面板,
文本框放置在Fram的BorderLayout.North
面板放置在Frame的BorderLayout.Center
创建了成员变量bton
长度为25的bton数组和btonlabel数组
通过for循环创建25个bton对象并设置了相应的label
利用Font设置了bton中label中字体的大小和字体
2.计算功能实现
通过给bton添加监听实现功能
创建了strA,strB和operate
通过一个action变量获得按钮的ActionCommand,
将ActionCommand转化为char类型赋值给act
str+=action利用字符串实现了数字追加
用if判断输入为数字还是运算符,初始化operate为~,通过判断operate是否为~判断用户输入的是第几个数。
当用户按下等号时再用if判断operate为何种运算符进入不同的运算。
在运算中通过继承了Arithmetic类,Arithmetic类接了两个接口,一个实现基础的四则运算,一个实现多功能计算,通过调用方法进行计算,并输出
3. 颜色设置功能
在Frame中添加了menuBar菜单栏,添加了颜色菜单项。
给颜色菜单项添加监听,当被点击时弹出窗口,在窗口里添加了各种颜色的复选框,为了使复选框只能选中一个,将复选框都添加在buttonGroup中。
为各个复选框添加监听,当复选框被选中时设置不同的按钮背景颜色
代码实现
package YMP.practical_Training.Test1_3; public interface base_Operation {double add(int a,int b);double sub(int a,int b);double mul(int a,int b);double div(int a,int b); double add(double a,double b);double sub(double a,double b);double mul(double a,double b);double div(double a,double b); }
package YMP.practical_Training.Test1_3; public interface moreArithmetic {double sin(int a);double cos(int a);double tan(int a); double sin(double a);double cos(double a);double tan(double a); double percent(int a);double percent(double a); double pow(int a,int b);double pow(double a,double b); double sqrt(int a);double sqrt(double a); double f(int a); double minusPower(double a); }
package YMP.practical_Training.Test1_3; public class Arithmetic implements moreArithmetic, base_Operation {@Overridepublic double sin(int a) {return Math.sin(a);} @Overridepublic double cos(int a) {return Math.cos(a);} @Overridepublic double tan(int a) {return Math.tan(a);} @Overridepublic double sin(double a) {return Math.sin(a);} @Overridepublic double cos(double a) {return Math.cos(a);} @Overridepublic double tan(double a) {return Math.tan(a);} @Overridepublic double percent(int a) {return (double)a/100;} @Overridepublic double percent(double a) {return a/100;} @Overridepublic double pow(int a, int b) {return Math.pow(a,b);} @Overridepublic double pow(double a, double b) {return Math.pow(a,b);} @Overridepublic double sqrt(int a) {return Math.sqrt(a);} @Overridepublic double sqrt(double a) {return Math.sqrt(a);} @Overridepublic double f(int a) {if(a==0||a==1){return 1;}else {return f(a-1)*a;}} @Overridepublic double minusPower(double a) {return pow(a,-1);} @Overridepublic double add(int a, int b) {return a+b;} @Overridepublic double sub(int a, int b) {return a-b;} @Overridepublic double mul(int a, int b) {return a*b;} @Overridepublic double div(int a, int b) {return a/b;} @Overridepublic double add(double a, double b) {return a+b;} @Overridepublic double sub(double a, double b) {return a-b;} @Overridepublic double mul(double a, double b) {return a*b;} @Overridepublic double div(double a, double b) {return a/b;} }
package YMP.practical_Training.Test1_3; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.zip.ZipEntry; public class TestCalculator { public static void main(String[] args) {new MyCalculator().loadMyCalculator();} } class MyCalculator extends Arithmetic implements ActionListener, MouseListener {String strA = "";String strB = "";String strC = "";char operator = '~'; private JButton[] bton; JTextField textField = new JTextField(10); Font font = new Font("宋体", Font.PLAIN, 30); private JDialog dialog; JCheckBox checkBoxRicegrey = new JCheckBox("米灰");JCheckBox checkBoxCream = new JCheckBox("米色");JCheckBox checkBoxCreamGreen = new JCheckBox("奶绿");JCheckBox checkBoxLemon = new JCheckBox("柠檬");JCheckBox checkBoxPink = new JCheckBox("佩奇");JCheckBox checkBoxRed = new JCheckBox("嫣红");JCheckBox checkBoxWhite=new JCheckBox("雪白"); JCheckBox checkBoxFogBlue=new JCheckBox("雾蓝"); JCheckBox checkBoxSkyBlue=new JCheckBox("天蓝"); ButtonGroup buttonGroup = new ButtonGroup(); Color thisColor; JPanel outerColour = new JPanel();JPanel inerColour = new JPanel(); String bttonText[] = {"sin", "CE", "X!", "%", "÷","cos", "7", "8", "9", "×","tan", "4", "5", "6", "-","√", "1", "2", "3", "+","x^y", "1/x", "0", ".", "="}; public void loadMyCalculator() {JFrame frame = new JFrame("计算器");frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);frame.setSize(650, 800);frame.setVisible(true); JPanel panel = new JPanel(); bton=new JButton[25]; JMenuBar menuBar = new JMenuBar();JMenu seting = new JMenu("设置");JMenuItem colour = new JMenuItem("颜色"); seting.add(colour);menuBar.add(seting);frame.setJMenuBar(menuBar); buttonGroup.add(checkBoxRicegrey);buttonGroup.add(checkBoxCreamGreen);buttonGroup.add(checkBoxCream);buttonGroup.add(checkBoxLemon);buttonGroup.add(checkBoxPink);buttonGroup.add(checkBoxRed);buttonGroup.add(checkBoxWhite);buttonGroup.add(checkBoxFogBlue);buttonGroup.add(checkBoxSkyBlue); dialog = new JDialog();dialog.setSize(400, 400);dialog.setLayout(new GridLayout(3, 3));dialog.setLocation(100, 200);dialog.add(checkBoxRicegrey);dialog.add(checkBoxCreamGreen);dialog.add(checkBoxLemon);dialog.add(checkBoxCream);dialog.add(checkBoxPink);dialog.add(checkBoxRed);dialog.add(checkBoxWhite);dialog.add(checkBoxFogBlue);dialog.add(checkBoxSkyBlue); checkBoxCreamGreen.setFont(font);checkBoxPink.setFont(font);checkBoxCream.setFont(font);checkBoxLemon.setFont(font);checkBoxRicegrey.setFont(font);checkBoxRed.setFont(font);checkBoxWhite.setFont(font);checkBoxFogBlue.setFont(font);checkBoxSkyBlue.setFont(font); checkBoxRed.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xE57677);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}} }}});checkBoxPink.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xFDE3E3);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}} }}});checkBoxCream.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xEBE9E0 );for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}} }}});checkBoxLemon.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xFFF450);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}} }}});checkBoxRicegrey.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xC2BFAC);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}} }}});checkBoxCreamGreen.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0xF1F5D9 );for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}} }}}); checkBoxWhite.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=Color.white;for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}} }}}); checkBoxSkyBlue.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0x72D9E2);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}} }}}); checkBoxFogBlue.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange()==ItemEvent.SELECTED){thisColor=new Color(0x7EBBDD);for(int i=0;i<bton.length;i++){if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton[i].setBackground(thisColor);}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton[i].setBackground(Color.white);}} }}}); colour.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {dialog.setVisible(true);}}); frame.add(panel, BorderLayout.CENTER); panel.setLayout(new GridLayout(5, 5)); textField.setPreferredSize(new Dimension(600, 200));frame.add(textField, BorderLayout.NORTH);textField.setFont(font);textField.setHorizontalAlignment(SwingConstants.RIGHT); for (int i = 0; i <25; i++) {bton[i]= new JButton(bttonText[i]);bton[i].setFont(font);panel.add(bton[i]);bton[i].addActionListener(this); //设置按钮颜色/* if (i < 6 || i == 9 || i == 10 || i == 14 || i == 15 || (i >= 19 && i < 25)) {bton.setActionCommand("outer");}if (i >= 6 && i <= 8 || i >= 11 && i <= 13 || i >= 16 && i <= 18) {bton.setActionCommand("iner");} */ }bton[0].setActionCommand("s"); bton[5].setActionCommand("c"); bton[10].setActionCommand("t"); bton[15].setActionCommand("√"); bton[20].setActionCommand("^"); bton[1].setActionCommand("E");bton[1].addMouseListener(this); bton[2].setActionCommand("!"); bton[21].setActionCommand("m"); } @Overridepublic void actionPerformed(ActionEvent e) {String action = e.getActionCommand(); char act = action.charAt(0); if (act >= '0' && act <= '9' || act == '.') {if (operator != '~') {strB += action;if (operator == 's') {textField.setText("sin" + strB);} else if (operator == 'c') {textField.setText("cos" + strB);} else if (operator == 't') {textField.setText("tan" + strB);} elsetextField.setText(strA + operator + strB);} else {strA += action;textField.setText(strA);} } else if (act == '+' || act == '-' || act == '×' || act == '÷' || act == '%' || act == 's' || act == 'c' || act == 't' || act == '√' || act == '^' || act == '!' || act == 'm') {operator = act;if (operator == 'm') {textField.setText(strA + "(^-1)");} else if (operator == 's') {textField.setText("sin" + strB);} else if (operator == 'c') {textField.setText("cos" + strB);} else if (operator == 't') {textField.setText("tan" + strB);} else {textField.setText(strA + operator);} } else if (act == '=') {if (operator == '+') {double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = add(a, b);textField.setText(strA + operator + strB + "=" + c); } else if (operator == '-') { double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = sub(a, b);textField.setText(strA + operator + strB + "=" + c); } else if (operator == '×') {double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = mul(a, b);textField.setText(strA + operator + strB + "=" + c); } else if (operator == '÷') {double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = div(a, b);textField.setText(strA + operator + strB + "=" + c); } else if (operator == '%') {double a = Double.parseDouble(strA);double c = percent(a);textField.setText(strA + operator + "=" + c); } else if (operator == 's') {double b = Double.parseDouble(strB);double c = sin(b);textField.setText("sin" + strB + "=" + c);} else if (operator == 'c') {double b = Double.parseDouble(strB);double c = cos(b);textField.setText("cos" + strB + "=" + c); } else if (operator == 't') {double b = Double.parseDouble(strB);double c = tan(b);textField.setText("tan" + strB + "=" + c); } else if (operator == '√') {double a = Double.parseDouble(strA);double c = sqrt(a);textField.setText(strA + "√" + "=" + c); } else if (operator == '^') {double a = Double.parseDouble(strA);double b = Double.parseDouble(strB);double c = pow(a, b);textField.setText(strA + "^" + strB + "=" + c); } else if (operator == '!') {int a = Integer.parseInt(strA);double c = f(a);textField.setText(strA + "!" + "=" + c); } else if (operator == 'm') {double a = Double.parseDouble(strA);double c = minusPower(a);textField.setText(strA + "(^-1)" + "=" + c);} operator = '~';strA = "";strB = ""; }} @Overridepublic void mouseClicked(MouseEvent e) {textField.setText("");operator = '~';strA = "";strB = ""; } @Overridepublic void mousePressed(MouseEvent e) { } @Overridepublic void mouseReleased(MouseEvent e) { } @Overridepublic void mouseEntered(MouseEvent e) { } @Overridepublic void mouseExited(MouseEvent e) { } }