自己写的Java版计算器

效果如下:


代码主要写成三个类了:

类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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用JavaWin10计算器,需要先了解计算器的基本功能和界面布局。计算器的基本功能包括加、减、乘、除四则运算以及括号的支持。 首先,需要创建一个Java窗口应用程序。可以使用Java Swing或JavaFX作为界面库。通过创建一个主窗口,可以将计算器的界面元素放置在窗口上,例如按钮、文本框等。可以使用布局管理器来更好地控制界面元素的布局。 其次,可以创建不同的按钮来实现不同的功能,例如数字按钮、运算符按钮、清除按钮、等号按钮等。可以通过添加事件监听器来处理按钮的点击事件。当用户点击数字按钮时,应该将对应的数字显示在文本框中。当用户点击运算符按钮时,应该将运算符添加到文本框中。当用户点击等号按钮时,应该将文本框中的表达式进行计算,并将结果显示在文本框中。 在进行运算之前,需要将文本框中的表达式转换为可执行的代码。可以使用Java的动态编译功能,将表达式编译为可执行的代码。然后,通过调用编译后的代码执行计算操作,并将结果返回。 最后,需要处理异常情况,例如用户输入非法表达式、除数为零等。可以使用try-catch语句来捕获异常,并在界面上显示错误信息。 总之,通过使用Java的窗口应用程序和界面库,以及动态编译功能,可以实现一个Win10计算器。以适当的布局和事件处理,能够满足用户的基本计算需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值