1、计算器完美代码import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;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.text.DecimalFormat;import javax.
2、swing.BorderFactory;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JCheckBoxMenuItem;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JRadi
3、oButtonMenuItem;import javax.swing.JTextArea;import javax.swing.JTextField;public class Calucator extends JFrame implements ActionListener private JTextField tf; private JPanel panel1, panel2, panel3; private JMenuBar myBar; private JMenu menu1, menu2, menu3; private JMenuItem editItem1, editItem2,
4、help1, help2; private JRadioButtonMenuItem seeItem1, seeItem2;/单选框 private boolean IfResult = true, flag = false; private String oper = =; private double result = 0; private Num numActionListener; private DecimalFormat df; public Calucator() super(计算器-软件092班熊治景);/设置标题栏 df = new DecimalFormat(#.#);/保
5、留四位小数 this.setLayout(new BorderLayout(5,5); panel1 = new JPanel(new GridLayout(1, 3, 10, 10); panel2 = new JPanel(new GridLayout(5, 6, 10, 10);/5行6列 panel3 = new JPanel(new BorderLayout(10, 10); /* * 菜单栏 */ myBar = new JMenuBar(); menu1 = new JMenu(编辑(E); menu2 = new JMenu(查看(V); menu3 = new JMenu(帮
6、助(H); menu1.setFont(new Font(宋体, Font.PLAIN, 12); menu2.setFont(new Font(宋体, Font.PLAIN, 12); menu3.setFont(new Font(宋体, Font.PLAIN, 12); /* * 编辑栏 */ editItem1 = new JMenuItem(复制(C) Ctrl+C); editItem1.addActionListener(this); editItem2 = new JMenuItem(粘贴(P) Ctrl+V); editItem2.addActionListener(this)
7、; editItem1.setFont(new Font(宋体,Font.PLAIN,12); editItem2.setFont(new Font(宋体,Font.PLAIN,12); /* * 查看栏 */ seeItem1 = new JRadioButtonMenuItem(科学型(T); seeItem2 = new JRadioButtonMenuItem(标准型(S); seeItem1.setFont(new Font(宋体,Font.PLAIN,12); seeItem2.setFont(new Font(宋体,Font.PLAIN,12); /* * 帮助栏 */ help
8、1 = new JMenuItem(帮助主题(H); help1.addActionListener(this); help2 = new JMenuItem(关于计算器(A); help2.addActionListener(this); help1.setFont(new Font(宋体,Font.PLAIN,12); help2.setFont(new Font(宋体,Font.PLAIN,12); ButtonGroup bgb = new ButtonGroup();/选项组 menu1.add(editItem1); menu1.add(editItem2); menu2.add(
9、seeItem1); menu2.add(seeItem2); menu3.add(help1); menu3.addSeparator();/添加一条分割线 menu3.add(help2); myBar.add(menu1); myBar.add(menu2); myBar.add(menu3); this.setJMenuBar(myBar); numActionListener = new Num();/实现数字监听 /* * 文本域,即为计算器的屏幕显示区域 */ tf = new JTextField(); Font f1=new Font(黑体,1,40);/显示屏数字字体 tf
10、.setFont(f1); tf.setBounds(15, 20, 410, 55); tf.setForeground(Color.GREEN); tf.setBackground(Color.RED);/文本区域的背景色 tf.setHorizontalAlignment(JTextField.RIGHT);/文字右对齐 tf.setText(); tf.setBorder(BorderFactory.createLoweredBevelBorder(); init();/对计算器进行初始化 /* * 初始化操作 * 添加按钮 */ private void init() addButt
11、on(panel1, Backspace, new Clear(), Color.red); addButton(panel1, CE, new Clear(), Color.red); addButton(panel1, C, new Clear(), Color.red); addButton(panel2, 1/x, new Signs(), Color.magenta); addButton(panel2, ln, new Signs(), Color.magenta); addButton(panel2, 7, numActionListener, Color.green); add
12、Button(panel2, 8, numActionListener, Color.green); addButton(panel2, 9, numActionListener, Color.green); addButton(panel2, , new Signs(), Color.red); addButton(panel2, n!, new Signs(), Color.magenta); addButton(panel2, sqrt, new Signs(), Color.magenta); addButton(panel2, 4, numActionListener, Color.
13、green); addButton(panel2, 5, numActionListener, Color.green); addButton(panel2, 6, numActionListener, Color.green); addButton(panel2, , new Signs(), Color.red); addButton(panel2, sin, new Signs(), Color.magenta); addButton(panel2, x2, new Signs(), Color.magenta); addButton(panel2, 1, numActionListen
14、er, Color.green); addButton(panel2, 2, numActionListener, Color.green); addButton(panel2, 3, numActionListener, Color.green); addButton(panel2, -, new Signs(), Color.red); addButton(panel2, cos, new Signs(), Color.magenta); addButton(panel2, x3, new Signs(), Color.magenta); addButton(panel2, 0, numA
15、ctionListener, Color.green); addButton(panel2, -/+, new Clear(), Color.green); addButton(panel2, ., new Dot(), Color.green); addButton(panel2, +, new Signs(), Color.red); addButton(panel2, tan, new Signs(), Color.magenta); addButton(panel2, %, new Signs(), Color.magenta); addButton(panel2, , numActi
16、onListener, Color.yellow); addButton(panel2, e, numActionListener, Color.yellow); addButton(panel2, , new Signs(), Color.yellow); addButton(panel2, =, new Signs(), Color.red); panel3.add(panel1, BorderLayout.NORTH); panel3.add(panel2, BorderLayout.CENTER); this.add(tf, BorderLayout.NORTH); this.add(
17、panel3); pack(); this.setLocation(300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /* * 统一设置按钮的的使用方式 * param panel * param name * param action * param color */ private void addButton(JPanel panel, String name, ActionListener action, Color color) JButton bt = new JButton(name); panel.ad
18、d(bt);/在面板上增加按钮 Font f3=new Font(黑体,1,20);/按钮字体 bt.setFont(f3); bt.setForeground( color);/设置前景(字体)颜色 bt.setBackground(new Color(26, 29, 34); bt.setFocusPainted(false); /去掉焦点框 bt.addActionListener(action);/增加监听事件 /* * 计算器的基础操作(+ - ) * param x */ private void getResult (double x) if(oper = +)result +=
19、 x; else if(oper = -)result -= x; else if(oper = )result *= x; else if(oper = )result /= x; else if(oper = =)result = x; tf.setText(df.format(result); /* * 运算符号的事件监听 */ class Signs implements ActionListener public void actionPerformed(ActionEvent e) /* * 用ActionEvent对象的getActionCommand()方法 * 取得与引发事件
20、对象相关的字符串 */ String str = e.getActionCommand(); /* sqrt求平方根 */ if(str.equals(sqrt) double i = Double.parseDouble(tf.getText(); if(i=0) /* * String.valueOf() 转换为字符串 * df.format() 按要求保留四位小数 * Math.sqrt() 求算数平方根 */ tf.setText(String.valueOf(df.format(Math.sqrt(i); else tf.setText(负数不能开平方根); /* ln求常用对数 *
21、/ else if(str.equals(ln) double i = Double.parseDouble(tf.getText(); if(i0) tf.setText(String.valueOf(df.format(Math.log(i); else tf.setText(负数不能求对数); /* %求百分比 */ else if(str.equals(%) tf.setText(df.format(Double.parseDouble(tf.getText() / 100); /* 1/x求倒数 */ else if(str.equals(1/x) if(Double.parseDo
22、uble(tf.getText() = 0) tf.setText(除数不能为零); else tf.setText(df.format(1 / Double.parseDouble(tf.getText(); /* sin求正弦函数 */ else if(str.equals(sin) double i = Double.parseDouble(tf.getText(); tf.setText(String.valueOf(df.format(Math.sin(i); /* cos求余弦函数 */ else if(str.equals(cos) double i = Double.parse
23、Double(tf.getText(); tf.setText(String.valueOf(df.format(Math.cos(i); /* tan求正切函数 */ else if(str.equals(tan) double i = Double.parseDouble(tf.getText(); tf.setText(String.valueOf(df.format(Math.tan(i); /* n!求阶乘 */ else if(str.equals(n!) double i = Double.parseDouble(tf.getText(); if(i%2=0)|(i%2=1)/判
24、断为整数放进行阶乘操作 int j = (int)i;/强制类型转换 int result=1; for(int k=1;k 0) if(tf.getText().length() 1) tf.setText(tf.getText().substring(0, tf.getText().length() - 1); /使用退格删除最后一位字符 else tf.setText(0); IfResult = true; else if(tf.getText().length() 2) tf.setText(tf.getText().substring(0, tf.getText().length() - 1); else tf.setText(0); IfResult = true; else if(str = CE) tf.setText(0); If
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1