自己写的Java版计算器
发布日期:2021-06-29 11:13:43
浏览次数:2
分类:技术文章
本文共 11327 字,大约阅读时间需要 37 分钟。
效果如下:
代码主要写成三个类了:
类1:
import java.awt.Color;import java.awt.Font;import javax.swing.BorderFactory;import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.SwingConstants;public class CalculatorMain { public static void main(String[] args) { JFrame windows = new JFrame("计算器"); JTextField text = new JTextField(); Font f = new Font("楷体", Font.PLAIN, 25); MyMenu myMenu = new MyMenu(windows, text); windows.setLayout(null); windows.setBounds(0, 0, 345, 326);//278 windows.setBackground(new Color(173,216,230)); windows.setResizable(false);//不能放大 windows.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); text.setBounds(10, 10, 322, 52);//244 text.setText("0");//初始化文本内容 text.setBackground(new Color(239,243,252)); text.setFont(f); //text.setEditable(false);//使控件不可编辑 text.setFocusable(false);//使控件无法获取焦点// text.setEnabled(false);//使控件不可用// UIManager.put("TextField.inactiveForeground", new Color(255, 0, 0)); text.setBorder(BorderFactory.createLineBorder(new Color(143,158,176)));//边框颜色 text.setHorizontalAlignment(SwingConstants.RIGHT); //声明按钮 MyButton Button1 = new MyButton("←", 62, 30, 10, 75, text);//17 MyButton Button2 = new MyButton("CE", 62, 30, 75, 75, text);//68 MyButton Button3 = new MyButton("C", 62, 30, 140, 75, text);//117 MyButton Button4 = new MyButton("±", 62, 30, 205, 75, text);//167 MyButton Button5 = new MyButton("√", 62, 30, 270, 75, text);//216 MyButton Button6 = new MyButton("7", 62, 30, 10, 111, text); MyButton Button7 = new MyButton("8", 62, 30, 75, 111, text); MyButton Button8 = new MyButton("9", 62, 30, 140, 111, text); MyButton Button9 = new MyButton("/", 62, 30, 205, 111, text, 5); MyButton Button10 = new MyButton("%", 62, 30, 270, 111, text, 4); MyButton Button11 = new MyButton("4", 62, 30, 10, 147, text); MyButton Button12 = new MyButton("5", 62, 30, 75, 147, text); MyButton Button13 = new MyButton("6", 62, 30, 140, 147, text); MyButton Button14 = new MyButton("*", 62, 30, 205, 147, text, 3); MyButton Button15 = new MyButton("1/x", 62, 30, 270, 147, text); MyButton Button16 = new MyButton("1", 62, 30, 10, 183, text); MyButton Button17 = new MyButton("2", 62, 30, 75, 183, text); MyButton Button18 = new MyButton("3", 62, 30, 140, 183, text); MyButton Button19 = new MyButton("-", 62, 30, 205, 183, text, 2); MyButton Button20 = new MyButton("=", 62, 66, 270, 183, text); MyButton Button21 = new MyButton("0", 127, 30, 10, 219, text); MyButton Button22 = new MyButton(".", 62, 30, 140, 219, text);//117 MyButton Button23 = new MyButton("+", 62, 30, 205, 219, text, 1);//167 windows.add(text); windows.add(Button1); windows.add(Button2); windows.add(Button3); windows.add(Button4); windows.add(Button5); windows.add(Button6); windows.add(Button7); windows.add(Button8); windows.add(Button9); windows.add(Button10); windows.add(Button11); windows.add(Button12); windows.add(Button13); windows.add(Button14); windows.add(Button15); windows.add(Button16); windows.add(Button17); windows.add(Button18); windows.add(Button19); windows.add(Button20); windows.add(Button21); windows.add(Button22); windows.add(Button23); windows.setVisible(true);//使窗口可显 }}类2:
import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JTextField;public class MyButton extends JButton{ private JTextField textField; private int s; static int judge = 0, state; static double a, b; MyButton button = this; MyButton(String name, int width, int height, int x, int y, Object... text) { Font f = new Font("楷体", Font.PLAIN, 17); //实现可变参数 if (text.length != 0) { for (Object t : text) { if (t instanceof JTextField) { this.textField = (JTextField)t; } if (t instanceof Integer) { this.s = (Integer)t; } } } this.setFont(f); this.setText(name); this.setLocation(x, y); this.setSize(width, height); this.setFocusPainted(false);//去焦点 this.setBackground(new Color(235,238,241)); this.setBorder(BorderFactory.createLineBorder(new Color(143,158,176))); //this.setBorder(BorderFactory.createLineBorder(new Color(248,220,42))); //按钮监听事件 this.addMouseListener(new Mouse()); this.addMouseListener(new Mouse2()); this.addMouseListener(new Mouse3()); //this.addMouseListener(new Mouse4()); this.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { Double c = 0.0; if (getText().equals("+") || getText().equals("-") || getText().equals("*") || getText().equals("/") || getText().equals("%")) { MyButton.state = s; try { MyButton.a = Double.parseDouble(textField.getText()); } catch (NumberFormatException e1) { System.out.println("数据出错!!!"); } MyButton.judge = 1; }else if (getText().equals("√")) { double temp; temp = Double.parseDouble(textField.getText()); temp = Math.sqrt(temp); textField.setText(String.valueOf(temp)); MyButton.judge = 1; }else if (getText().equals("1/x")) { double temp; temp = Double.parseDouble(textField.getText()); temp = 1 / temp; textField.setText(String.valueOf(temp)); MyButton.judge = 1; }else if (getText().equals("=")) { try { MyButton.b = Double.parseDouble(textField.getText()); } catch (NumberFormatException e1) { System.out.println("数据出错!!!"); } if (MyButton.state == 1) { c = MyButton.a + MyButton.b; }else if (MyButton.state == 2) { c = MyButton.a - MyButton.b; }else if (MyButton.state == 3) { c = MyButton.a * MyButton.b; }else if (MyButton.state == 5) { c = MyButton.a / MyButton.b; }else if (MyButton.state == 4) { c = MyButton.a % MyButton.b; } textField.setText(String.valueOf(c)); MyButton.judge = 1; }else if (getText().equals("←")) { String str = textField.getText(); char[] str3 = str.toCharArray(); String str2 = ""; int len = str.length(); if (len != 1) { for (int i = 0; i < len-1; i++) { str2 += String.valueOf(str3[i]); } textField.setText(str2); }else { textField.setText("0"); } }else if (getText().equals("CE")) { textField.setText("0"); }else if (getText().equals("C")) { String str = textField.getText(); char[] str3 = str.toCharArray(); String str2 = ""; int len = str.length(); if (len != 1) { for (int i = 0; i < len-1; i++) { str2 += String.valueOf(str3[i]); } textField.setText(str2); }else { textField.setText("0"); } }else { textField.setText(Show()); } } }); } class Mouse extends MouseAdapter { public void mouseEntered(MouseEvent e) {// button.setBorder(BorderFactory.createLineBorder(new Color(248,220,42)));// button.setBackground(new Color(255,212,114)); button.setBorder(BorderFactory.createLineBorder(new Color(143,158,176))); button.setBackground(new Color(184,207,229)); } } class Mouse2 extends MouseAdapter { public void mouseExited(MouseEvent e) { button.setBorder(BorderFactory.createLineBorder(new Color(143,158,176))); button.setBackground(new Color(235,238,241)); } } class Mouse3 extends MouseAdapter { public void mouseClicked(MouseEvent e) { button.setBackground(new Color(184,220,229)); } } public String Show() { String text = new String(); if (this.judge == 0) { if (this.textField.getText().equals("0.0") || this.textField.getText().equals("0")) { if (this.getText().equals("±")) { text = "-"; }else if (this.getText().equals(".")) { text = "0"; }else { text += this.getText(); } }else { if (this.getText().equals("±")) { text = "-"; }else { text = this.textField.getText(); if (text.indexOf(".") != -1 && this.getText().equals(".") || text.equals("-") && this.getText().equals(".")) { text += ""; }else { text += this.getText(); } } } }else { if (this.getText().equals("±")) { text = "-"; this.judge = 0; }else if (this.getText().equals(".")) { text = this.textField.getText(); }else { text = ""; text += this.getText(); this.judge = 0; } } return text; } }类3:
import java.awt.Color;import java.awt.Font;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.UnsupportedFlavorException;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.IOException;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JTextField;public class MyMenu { private JMenuBar mb = new JMenuBar(); Font f = new Font("楷体", Font.PLAIN, 19); Font f1 = new Font("楷体", Font.PLAIN, 18); private JMenu advanced = new JMenu("高级"); private JMenu edit = new JMenu("编辑"); private JMenuItem advanced1 = new JMenuItem("表达式求值"); private JMenuItem copyItem = new JMenuItem("复制"); private JMenuItem pasteItem = new JMenuItem("粘贴"); private JMenu help = new JMenu("帮助"); private JMenuItem InformationItem = new JMenuItem("关于计算器"); MyMenu(JFrame windows, JTextField text) { advanced1.setFont(f1); copyItem.setFont(f1); pasteItem.setFont(f1); InformationItem.setFont(f1); advanced.add(advanced1); edit.add(copyItem); edit.add(pasteItem); edit.setFont(f); advanced.setFont(f); help.setFont(f); help.add(InformationItem); mb.add(advanced); mb.add(edit); mb.add(help); mb.setBackground(new Color(238,238,238)); advanced1.setEnabled(false); copyItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); StringSelection st = new StringSelection(text.getText()); clipboard.setContents(st, null); } }); pasteItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) { try { String content = (String)clipboard.getData(DataFlavor.stringFlavor); text.setText(content); } catch (UnsupportedFlavorException | IOException e1) { System.out.println("剪切板为空!!!"); } } } }); //信息提示框 JTextField text2 = new JTextField(); text2.setFocusable(false); text2.setBackground(new Color(235,238,241)); text2.setFont(f); text2.setText("可能有Bug,见谅!!!复制粘贴功能可用,高级中表达式求值功能不可用。"); JDialog d1 = new JDialog(windows, "提示", false); d1.setBounds(20, 30, 300, 300); d1.setResizable(false); d1.add(text2); d1.pack(); InformationItem.addActionListener(e -> d1.setVisible(true)); // copyItem.setFont(f1);// pasteItem.setFont(f1);// InformationItem.setFont(f1); windows.setJMenuBar(mb); } class Mouse extends MouseAdapter { public void mouseEntered(MouseEvent e) { } } class Mouse2 extends MouseAdapter { public void mouseExited(MouseEvent e) { } }}
源码下载地址:http://download.csdn.net/my/uploads
转载地址:https://blog.csdn.net/ZWHSOUL/article/details/78956281 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月02日 19时14分23秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
五一好礼70份免费送:示波器、开发板、焊台等!
2019-04-29
2纳米芯片问世!芯片性能要起飞?!
2019-04-29
ARM Cortex系列那么多处理器,该怎么区分?
2019-04-29
知乎:学计算机的女生都怎么样了?
2019-04-29
华为重磅反击,鸿蒙来了!
2019-04-29
常用电子接口大全,遇到不认识的,就翻出来对照辨认!
2019-04-29
芯片IC附近为啥要放0.1uF的电容?
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录。
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录(上)
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录(下)
2019-04-29
突破!台积电1nm芯片,有了新进展。
2019-04-29
一文读懂全系列树莓派!
2019-04-29
自制一个害羞的口罩,见人就闭嘴,戴着可以喝奶茶
2019-04-29
聊聊我是如何编程入门的
2019-04-29
J-Link该如何升级固件?
2019-04-29
从电子垃圾中提炼黄金,可以!!!
2019-04-29
知乎大神深入解析:单片机晶振脚原理是什么?
2019-04-29
电容有17种?看看详细介绍!
2019-04-29
如何准备电赛?19年电赛经验总结!
2019-04-29
蓝牙:为啥叫“蓝”牙,不叫“白”牙?
2019-04-29