package 大作业2; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; public class Calculator extends JFrame implements ActionListener { private static final long serialVersionUID = -2297903483596263990L; final String KEYS[] = { " ", "Backspace", "CE", "C", " ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "-", "*", "/", "=", ".", "st", "int", "...", "+/-" }; final String str1[] = { "二进制", "八进制", "十进制", "十六进制" }; final String str2[] = { "sin", "cos", "tan", "log", "x^y", "x^3", "x^2", "n!", " ", " ", " ", " ", }; private JButton keys[] = new JButton[KEYS.length]; JRadioButton jr[] = new JRadioButton[str1.length]; ButtonGroup group = new ButtonGroup(); JButton btn1[] = new JButton[str2.length]; private JTextField resultText = new JTextField("0"); private boolean firstDigit = true; private double resultNum = 0.0; private String operator = "="; private boolean operateValidFlag = true; public Calculator() { super(); init(); this.setBackground(Color.LIGHT_GRAY); this.setTitle("MyCalculator"); this.setLocation(250, 200); this.setResizable(false); this.pack(); } private void init() { resultText.setHorizontalAlignment(JTextField.RIGHT); resultText.setEditable(false); resultText.setBackground(Color.WHITE); JPanel calckeysPanel = new JPanel(); calckeysPanel = new JPanel(new GridLayout(5, 5, 3, 3)); for (int i = 0; i < KEYS.length; i++) { keys[i] = new JButton(KEYS[i]); calckeysPanel.add(keys[i]); keys[i].addActionListener(this); } keys[1].setPreferredSize(new Dimension(100, 40)); for (int j = 0; j < str1.length; j++) { jr[j] = new JRadioButton(str1[j]); group.add(jr[j]); jr[j].addActionListener(this); } for (int z = 0; z < str2.length; z++) { btn1[z] = new JButton("" + str2[z]); btn1[z].setContentAreaFilled(true); btn1[z].addActionListener(this); } btn1[1].setPreferredSize(new Dimension(50, 30)); JPanel p2 = new JPanel(); p2 = new JPanel(new GridLayout(1, 4, 5, 10)); for (int x = 0; x < str1.length; x++) { p2.add(jr[x]); } JPanel p3 = new JPanel(); p3 = new JPanel(new GridLayout(4, 3, 35, 20)); for (int y = 0; y < str2.length; y++) { p3.add(btn1[y]); } JPanel p4 = new JPanel(); p4 = new JPanel(new BorderLayout()); p4.add(p2, "North"); p4.add(p3, "Center"); JPanel panel1 = new JPanel(); panel1.add("West", calckeysPanel); panel1.add("West", p4); JPanel top = new JPanel(); top.setLayout(new BorderLayout()); top.add("Center", resultText); getContentPane().setLayout(new BorderLayout()); getContentPane().add("North", top); getContentPane().add("Center", panel1); } public void actionPerformed(ActionEvent e) { String label = e.getActionCommand(); if (label.equals(KEYS[1])) { handleBackspace(); } else if (label.equals(KEYS[2])) { resultText.setText("0"); } else if (label.equals(KEYS[3])) { handleC(); } else if ("0123456789.".indexOf(label) >= 0) { handleNumber(label); } else if (e.getActionCommand() == "二进制") { int n = Integer.parseInt(resultText.getText()); resultText.setText(Integer.toBinaryString(n)); if(e.getActionCommand() == "八进制"){ } } else if (e.getActionCommand() == "八进制") { int n = Integer.parseInt(resultText.getText()); resultText.setText(Integer.toOctalString(n)); } else if (e.getActionCommand() == "十六进制") { int n = Integer.parseInt(resultText.getText()); resultText.setText(Integer.toHexString(n)); } else { handleOperator(label); } } private void handleBackspace() { String text = resultText.getText(); int i = text.length(); if (i > 0) { text = text.substring(0, i - 1); if (text.length() == 0) { resultText.setText("0"); firstDigit = true; operator = "="; } else { resultText.setText(text); } } } private void handleNumber(String key) { if (firstDigit) { resultText.setText(key); } else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) { resultText.setText(resultText.getText() + "."); } else if (!key.equals(".")) { resultText.setText(resultText.getText() + key); } firstDigit = false; } private void handleC() { resultText.setText("0"); firstDigit = true; operator = "="; } private void handleOperator(String key) { if (operator.equals("/")) { if (getNumberFromText() == 0.0) { operateValidFlag = false; resultText.setText("除数不能为零"); } else { resultNum /= getNumberFromText(); } } else if (operator.equals("n!")) { if (resultNum % 1 == 0) { if (getNumberFromText() == 0.0) { resultNum = 1; } else { for (int i = 0; i <= resultNum; i++) { int sum = 1; for (int j = 1; j <= i; j++) { sum *= j; resultNum = sum; } } } } else resultText.setText("阶乘只能是正整数"); } else if (operator.equals("+")) { resultNum += getNumberFromText(); } else if (operator.equals("-")) { resultNum -= getNumberFromText(); } else if (operator.equals("*")) { resultNum *= getNumberFromText(); } else if (operator.equals("+/-")) { resultNum = resultNum * (-1); } else if (operator.equals("sin")) { resultNum = Math.sin(resultNum); } else if (operator.equals("cos")) { resultNum = Math.cos(resultNum); } else if (operator.equals("tan")) { resultNum = Math.tan(resultNum); } else if (operator.equals("log")) { resultNum = Math.log(resultNum); } else if (operator.equals("x^2")) { resultNum = resultNum * resultNum; } else if (operator.equals("x^3")) { resultNum = resultNum * resultNum * resultNum; } else if (operator.equals("int")) { resultNum = (int) resultNum; } else if (operator.equals("x^y")) { // resultNum = Math.pow(x,y); } else if (operator.equals("st")) { resultText.setText(String.valueOf(resultNum)); } else if (operator.equals("=")) { resultNum = getNumberFromText(); } if (operateValidFlag) { long t1; double t2; t1 = (long) resultNum; t2 = resultNum - t1; if (t2 == 0) { resultText.setText(String.valueOf(t1)); } else { resultText.setText(String.valueOf(resultNum)); } } operator = key; firstDigit = true; operateValidFlag = true; } private double getNumberFromText() { double result = 0; try { result = Double.valueOf(resultText.getText()).doubleValue(); } catch (NumberFormatException e) { } return result; } public static void main(String args[]) { Calculator calculator1 = new Calculator(); calculator1.setVisible(true); calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
最近下载更多
yayaYAYASH LV1
2023年12月30日
微信网友_6794787497316352 LV1
2023年12月26日
夜猫子111 LV2
2023年10月20日
lmml2307831267 LV2
2023年6月25日
1239856 LV1
2022年12月17日
xixiwoaini LV3
2022年12月14日
双方各何必呢 LV13
2022年12月7日
你们的代码都是我的了 LV16
2022年11月18日
wadadd LV7
2022年9月4日
林间听风 LV10
2022年6月14日
最近浏览更多
芋妮奶茶
5小时前
暂无贡献等级
19397872306 LV2
2月22日
马畑ASLMT
2月17日
暂无贡献等级
jxjdjdjdjdjdjjj LV11
2023年12月31日
yayaYAYASH LV1
2023年12月30日
kuknkk LV1
2023年12月27日
lshlsh
2023年12月27日
暂无贡献等级
微信网友_6794787497316352 LV1
2023年12月26日
很离谱的一天啊
2023年12月22日
暂无贡献等级
宋丹旭
2023年12月15日
暂无贡献等级