【swing】简单计算器(样式神还原系统自带版本)

1、运行截图


2、源码

package jframe;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

/**
 * 
 * 简易计算器的实现
 * @author Kissy小强
 *
 */
public class Calculator extends JFrame {

	private static final long serialVersionUID = 1L;

	private JPanel contentPane;  //顶层容器

	private JTextField display;  //输入框

	private ActionListener insert = new InsertAction();  //输入监听

	private ActionListener command = new CommandAction();  //预算符监听

	private double result = 0;  // 默认计算结果为0

	private String lastCommand = "=";  // 默认第一次运算为  等号

	private boolean start = true;  // 是否为首次输入


	public static void main(String[] args) {

		try {
			//设置样式
			UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

		} catch (Throwable e) {

			e.printStackTrace();

		}
		
		EventQueue.invokeLater(new Runnable() {

			public void run() {

				try {

					Calculator frame = new Calculator();

//					frame.setVisible(true);

				} catch (Exception e) {

					e.printStackTrace();

				}

			}

		});

	}

	public Calculator() {

		setTitle("计算器");

		setDefaultCloseOperation(2);

        setResizable(false);
        
        Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();  
        
        setLocation(screenSize.width/2-screenSize.width/8, screenSize.height/2-screenSize.height/8);  
		
		init();
		
		setVisible(true);
	}		
	
	
	public void init() {
		
		//设置顶层容器

		contentPane = new JPanel();

		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		contentPane.setLayout(new BorderLayout(0, 0));

		setContentPane(contentPane);

		//设置输入框
		
		JPanel displayPanel = new JPanel();

		contentPane.add(displayPanel, BorderLayout.NORTH);  //输入框设置为上边界
		
		display = new JTextField();

		display.setText("0");

		display.setHorizontalAlignment(SwingConstants.RIGHT);

		display.setEditable(false); 

		display.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		display.setColumns(13);

		displayPanel.add(display);

		//设置按钮
		
		JPanel buttonPanel = new JPanel();

		contentPane.add(buttonPanel, BorderLayout.CENTER);

		buttonPanel.setLayout(new GridLayout(4, 4, 5, 5));

		JButton number7Button = new JButton("7");

		number7Button.addActionListener(insert);

		number7Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number7Button);

		JButton number8Button = new JButton("8");

		number8Button.addActionListener(insert);

		number8Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number8Button);

		JButton number9Button = new JButton("9");

		number9Button.addActionListener(insert);

		number9Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number9Button);

		JButton divideButton = new JButton("/");

		divideButton.addActionListener(command);

		divideButton.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(divideButton);

		JButton number4Button = new JButton("4");

		number4Button.addActionListener(insert);

		number4Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number4Button);

		JButton number5Button = new JButton("5");

		number5Button.addActionListener(insert);

		number5Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number5Button);

		JButton number6Button = new JButton("6");

		number6Button.addActionListener(insert);

		number6Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number6Button);

		JButton multiplyButton = new JButton("*");

		multiplyButton.addActionListener(command);

		multiplyButton.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(multiplyButton);

		JButton number3Button = new JButton("1");

		number3Button.addActionListener(insert);

		number3Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number3Button);

		JButton number2Button = new JButton("2");

		number2Button.addActionListener(insert);

		number2Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number2Button);

		JButton number1Button = new JButton("3");

		number1Button.addActionListener(insert);

		number1Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number1Button);

		JButton subtractButton = new JButton("-");

		subtractButton.addActionListener(command);

		subtractButton.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(subtractButton);

		JButton number0Button = new JButton("0");

		number0Button.addActionListener(insert);

		number0Button.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(number0Button);

		JButton dotButton = new JButton(".");
		
		dotButton.addActionListener(insert);

		dotButton.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(dotButton);

		JButton equalButton = new JButton("=");

		equalButton.addActionListener(command);

		equalButton.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(equalButton);

		JButton addButton = new JButton("+");

		addButton.addActionListener(command);

		addButton.setFont(new Font("微软雅黑", Font.PLAIN, 15));

		buttonPanel.add(addButton);

		pack(); //使用时  setSize 方法将失效

	}

	/**
	 * 数字监听事件
	 * @author xiaozhx
	 *
	 */
	private class InsertAction implements ActionListener {

		public void actionPerformed(ActionEvent e) {

			String input = e.getActionCommand();

			String text = display.getText();

			if (start) {

				display.setText("");

				start = false;

			}

			if (text.startsWith(".")) {

				display.setText("0" + display.getText() + input);

			} else if (text.startsWith("-0.") || text.startsWith("0.")) {

				display.setText(display.getText() + input);

			} else if (text.startsWith("-0")) {

				display.setText("-" + input);

			} else if (text.startsWith("0")) {

				display.setText(input);

			} else {

				display.setText(display.getText() + input);

			}

		}

	}

	/**
	 * 符号监听事件
	 */
	private class CommandAction implements ActionListener {

		public void actionPerformed(ActionEvent e) {

			String command = e.getActionCommand();

			if (start) {

				if (command.equals("-")) {

					display.setText(command);

					start = false;

				} else {

					lastCommand = command;

				}

			} else {

				calculate(Double.parseDouble(display.getText()));

				lastCommand = command;

				start = true;

			}

		}

	}

	/**
	 * 运算处理
	 */
	public void calculate(double x) {

		char operator = lastCommand.charAt(0);

		switch (operator) {

		case '+':

			result += x;

			break;

		case '-':

			result -= x;

			break;

		case '*':

			result *= x;

			break;

		case '/':

			result /= x;

			break;

		case '=':

			result = x;

			break;

		}

		display.setText("" + result);

	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值