博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己写的Java版计算器
阅读量:1870 次
发布时间:2019-04-26

本文共 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

你可能感兴趣的文章
五年,我成为了一名嵌入式工程师。
查看>>
2020年电赛题目,命题专家们怎么看?
查看>>
PCB元器件摆放不可忽略的10个技巧
查看>>
掌握AI核心技术没有秘籍,能自己创造就是王道
查看>>
大学老师的月薪多少?实话实说:4万多一点……
查看>>
2020年电赛题目,命题专家权威解析!
查看>>
写论文,这个神器不能少!
查看>>
现在做硬件工程师还有前途吗?
查看>>
华为被超越!这家公司成中国最大智能手机制造商,不是小米!
查看>>
芯片为什么持续缺货?
查看>>
美国无人机在火星首飞成功,创造历史,3米飞行高度悬停30秒
查看>>
缺货涨价很久的MCU的国产和国外厂家汇总!(80家)
查看>>
华为重磅反击,鸿蒙来了!
查看>>
常用电子接口大全,遇到不认识的,就翻出来对照辨认!
查看>>
芯片IC附近为啥要放0.1uF的电容?
查看>>
电赛 | 19年全国一等奖,北航学子回忆录。
查看>>
电赛 | 19年全国一等奖,北航学子回忆录(上)
查看>>
电赛 | 19年全国一等奖,北航学子回忆录(下)
查看>>
突破!台积电1nm芯片,有了新进展。
查看>>
一文读懂全系列树莓派!
查看>>