⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculatergui.java

📁 一个简单的模仿 window 计算器的java程序 可以进行加
💻 JAVA
字号:
package zzjun.gui.service;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import zzjun.gui.domain.CalData;

public class CalculaterGUI extends JFrame implements ActionListener {

	private JPanel textPanel;
	private JPanel keyPanel;
	private JPanel mPanel;
	private JPanel cPanel;
	private JTextField textField;
	private JTextField mTextField;
	private String[] keyNames = { "7", "8", "9", "/","sqrt", "4", "5", "6", "*","%", "1",
			"2", "3", "-","1/x", "0", "+/-",".", "+", "=" };
	private String[] cNames = { "Bankspace", "CE", "C" };
	private String[] mNames={"MC","MR","MS","M+"};
	private JButton keyButtons[] = new JButton[20];
	private JButton cButtons[] = new JButton[3];
	private JButton mButtons[] = new JButton[4];
	int flag = 0; // 状态标志位   判断是否重起一行

	public CalculaterGUI(String title) {
		super(title);
		setLayout(new BorderLayout(15,15));
		textField = new JTextField();
		mTextField=new JTextField();
		mTextField.setEditable(false);
		textField.setHorizontalAlignment(textField.RIGHT);
		textField.setText("0");
		
		textPanel = new JPanel();
		textPanel.setLayout(new BorderLayout());
		textPanel.add(textField,BorderLayout.CENTER);
		
		keyPanel = new JPanel();
		keyPanel.setLayout(new GridLayout(4, 5, 5, 8));				
		for (int i = 0; i < keyButtons.length; i++) {
			keyButtons[i] = new JButton(keyNames[i]);
			keyButtons[i].setForeground(Color.blue);
			keyButtons[i].addActionListener(this);
			keyPanel.add(keyButtons[i]);
		}
		keyButtons[3].setForeground(Color.red);
		keyButtons[8].setForeground(Color.red);
		keyButtons[13].setForeground(Color.red);
		keyButtons[18].setForeground(Color.red);
		keyButtons[19].setForeground(Color.red);
		
		cPanel=new JPanel();
		cPanel.setLayout(new GridLayout(1,3,3,3));
		for (int i = 0; i < cButtons.length; i++) {
			cButtons[i] = new JButton(cNames[i]); 
			cButtons[i].setForeground(Color.red);
			 cButtons[i].addActionListener(this);
			cPanel.add(cButtons[i]);
		}
		
		mPanel=new JPanel();
		mPanel.setLayout(new GridLayout(4,1,3,3));
		for(int i=0; i<mButtons.length; i++){
			mButtons[i]=new JButton(mNames[i]);
			mButtons[i].setForeground(Color.red);
			mButtons[i].addActionListener(this);
			mPanel.add(mButtons[i]);
		}
		
		JPanel center=new JPanel();
		center.setLayout(new BorderLayout(15,12));
		center.add(cPanel, BorderLayout.NORTH);
		center.add(keyPanel, BorderLayout.CENTER);
		
		JPanel left=new JPanel();
		left.setLayout(new BorderLayout(10,8));
		left.add(mTextField,BorderLayout.NORTH);
		left.add(mPanel, BorderLayout.CENTER);
		
		add(textPanel,BorderLayout.NORTH);
		add(left,BorderLayout.WEST);
		add(center,BorderLayout.CENTER);

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent event) {
				System.exit(0);
			}
		});
		pack();
		setResizable(false); // 屏蔽最大化
		setVisible(true);
	}

	CalData calData = new CalData();
	ICalculater IC = new CalculaterImpl();
	String sign = null;
	StringBuffer sb=new StringBuffer();
	

	@Override
	public void actionPerformed(ActionEvent event) {
		JButton button = (JButton) event.getSource();

		if (textField.getText().equals("0") && ".*/+-=0123456789".indexOf(button.getText()) != -1) {
			if (".*/+-=".indexOf(button.getText()) == -1) {
				textField.setText(button.getText());
				sb.append(button.getText());
			} else {
				if ("+-*/".indexOf(button.getText()) != -1) {
					calData.setNum1(0d);
					sb.append("0"+button.getText());
					sign = button.getText();
				} else if(button.getText().equals(".")){
					textField.setText(textField.getText() + button.getText());
					sb.append(textField.getText());
				}
			}
		} else {
			if ("-+*/".indexOf(button.getText()) != -1) {      //输入+-*/ 
				if(sign==null||(sb.charAt(sb.length()-1)=='+'||sb.charAt(sb.length()-1)=='-'||sb.charAt(sb.length()-1)=='*'||sb.charAt(sb.length()-1)=='/')){
					calData.setNum1(Double.parseDouble(textField.getText()));
					sign = button.getText();
					sb.delete(0, sb.length());
					sb.append(textField.getText()+button.getText());
					flag = 1;
				}else{
					calData.setNum2(Double.parseDouble(textField.getText()));
					if (sign.equals("+")) IC.add(calData);
					if (sign.equals("-")) IC.sub(calData);
					if (sign.equals("*")) IC.multiply(calData);
					if (sign.equals("/")) IC.divide(calData);
					textField.setText(String.valueOf(calData.getResult()));
					sign = button.getText();
					flag = 1;
					calData.setNum1(Double.parseDouble(textField.getText()));
					sb.delete(0, sb.length());
					sb.append(textField.getText()+button.getText());
				}
				
			}

			if (".0123456789".indexOf(button.getText()) != -1) {    // 输入是数字或者小数点
				if (flag == 1) {
					    textField.setText(button.getText());
					    sb.append(button.getText());
					flag = 0;
				} else {
					try {
						Double.parseDouble(textField.getText()+ button.getText()); // 判断是否可以转换为一个double
						textField.setText(textField.getText()+ button.getText());
						sb.append(button.getText());
					} catch (Exception e) {
						System.out.println("非法数字!");
					}

				}

			}

		}
		
		

		if (button.getText().equals("=")&&sign!=null) {
			flag=1;
			calData.setNum2(Double.parseDouble(textField.getText()));
			if (sign.equals("+")) IC.add(calData);
			if (sign.equals("-")) IC.sub(calData);
			if (sign.equals("*")) IC.multiply(calData);
			if (sign.equals("/")) IC.divide(calData);
			sb.delete(0, sb.length());
			sign=null;
			textField.setText(String.valueOf(calData.getResult()));
		}
		

		if (button.getText().equals("C")) {
			textField.setText("0");
			calData.setNum1(0d);
			calData.setNum2(0d);
			sign = null;
			sb.delete(0, sb.length());
			sb.append("0");
			flag = 0;
		}
		
		if(button.getText().equals("CE")){
			textField.setText("0");
		}
		
		if(button.getText().equals("+/-")){
			if(!textField.getText().isEmpty()){
				textField.setText(String.valueOf(-1*Double.parseDouble(textField.getText())));
			}			
		}
		
		if(button.getText().equals("sqrt")){
			if(!textField.getText().isEmpty()){
				calData.setNum1(Double.parseDouble(textField.getText()));
				IC.sqrt(calData);
				textField.setText(String.valueOf(calData.getResult()));
				flag = 1;
			}
		}
		
		if(button.getText().equals("1/x")){
			if(!textField.getText().isEmpty()){
				calData.setNum1(Double.parseDouble(textField.getText()));
				IC.oneDivideX(calData);
				textField.setText(String.valueOf(calData.getResult()));
				flag = 1;
			}
		}
		
		if (button.getText().equals("Bankspace")){
			if(!textField.getText().isEmpty()){
				textField.setText(textField.getText().substring(0,textField.getText().length()-1));
				sb.deleteCharAt(sb.length()-1);
			}
			
		}
		
//		System.out.println("====="+sb.toString());
		
		if(textField.getText().equals("Infinity")||textField.getText().equals("-Infinity")){
			textField.setText("除数不能为0!");
		}
		if(textField.getText().equals("NaN")){
			textField.setText("函数输入无效。");
		}

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -