Calculator.java

package Calculator;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.FlowLayout;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.text.DecimalFormat;

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class Calculator implements ActionListener {

private JFrame frame = new JFrame();

// 计算器上各按键的名字(从上到下,从左到右)

private String[] keys = { "(", ")", "C", "Back", "%", "xʸ", "√x", "÷", "7", "8", "9", "*", "4", "5", "6", "-", "1",

"2", "3", "+", "+/-", "0", ".", "=" };

private JButton buttons[] = new JButton[keys.length]; // 计算器上按键的按钮

String expressionString = "";

private JTextField expressionText = new JTextField(""); // 显示计算表达式文本框

public static JTextField resultText = new JTextField("0"); // 显示计算结果文本框

private Calculate cal = new Calculate();

static Boolean operation_flag = true;

/**

* 构造函数

*/

public Calculator() {

init(); // 初始化计算器界面

frame.setTitle("Calculator -- @author Yan Yi");

frame.setSize(366, 439);

frame.setLocation(500, 300);

frame.setResizable(false); // 不允许修改计算器窗口的大小

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

/**

* 初始化计算器

*/

private void init() {

Color color1 = new Color(181, 181, 181); // 背景颜色

Color color2 = new Color(126, 192, 238); // 等于号专属颜色

Color color3 = new Color(232, 232, 232); // 功能键和运算符颜色

// 建立一个画板放文本框

JPanel textPanel = new JPanel();

textPanel.setLayout(new BorderLayout(0, 8)); // 边界布局

textPanel.setBackground(color1);

textPanel.add(expressionText, BorderLayout.NORTH);

textPanel.add(resultText, BorderLayout.SOUTH);

expressionText.setFont(new Font("楷体", Font.BOLD, 20)); // 设置文本框中文字的字体以及大小,加粗

expressionText.setHorizontalAlignment(JTextField.LEFT); // 文本框中的内容采用右对齐方式

expressionText.setEditable(false); // 不能修改结果文本框

// resultText.setBorder(color1); //删除文本框的边框

expressionText.setBackground(color3); // 设置文本框背景颜色

resultText.setFont(new Font("楷体", Font.BOLD, 20)); // 设置文本框中文字的字体以及大小,加粗

resultText.setHorizontalAlignment(JTextField.LEFT); // 文本框中的内容采用右对齐方式

resultText.setEditable(false); // 不能修改结果文本框

// resultText.setBorder(color1); //删除文本框的边框

// 设置文本框背景颜色

resultText.setBackground(color3);

// 初始化计算器上键的按钮,将键放在一个画板内

JPanel keysPanel = new JPanel();

// 用网格布局器,6行,4列的网格,网格之间的水平方向垂直方向间隔均为2个像素

keysPanel.setLayout(new GridLayout(6, 4, 2, 2));

// 初始化功能按钮

for (int i = 0; i < 8; i++) {

buttons[i] = new JButton(keys[i]);

keysPanel.add(buttons[i]);

buttons[i].setBackground(color3);

buttons[i].setForeground(Color.black);

buttons[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18));

buttons[i].setBorderPainted(false); // 去除按钮的边框

}

// 初始化运算符及数字键按钮

for (int i = 8; i < keys.length; i++) {

buttons[i] = new JButton(keys[i]);

keysPanel.add(buttons[i]);

if ((i + 1) % 4 == 0)

buttons[i].setBackground(color3);

else

buttons[i].setBackground(Color.white);

buttons[i].setForeground(Color.black);

buttons[i].setFont(new Font(Font.SERIF, Font.PLAIN, 18));

buttons[i].setBorderPainted(false); // 去除按钮的边框

}

buttons[23].setBackground(color2); // '='符键用特殊颜色

keysPanel.setBackground(color1);

// 将文本框所在的面板放在北部,将keysPanel面板放在计算器的中部

frame.getContentPane().add("North", textPanel);

frame.getContentPane().add("Center", keysPanel);

// 设置两个面板的边框,尽量还原win10计算器

textPanel.setBorder(BorderFactory.createMatteBorder(25, 3, 1, 3, color1));

keysPanel.setBorder(BorderFactory.createMatteBorder(6, 3, 3, 3, color1));

// 为各按钮添加事件监听器,都使用同一个事件监听器。

for (int i = 0; i < keys.length; i++) {

buttons[i].addActionListener(this);

}

}

/**

* 处理事件

*/

public void actionPerformed(ActionEvent ev) {

String command = ev.getActionCommand(); // 获取事件源

System.out.println(command);

if (command.equals(keys[2])) {

// 用户按了"C"键

expressionString = "";

resultText.setText("0");

operation_flag = true;

} else if (operation_flag == true) {

if (command.equals(keys[3])) {

// 用户按了"Back"键

int len = expressionString.length();

if (expressionString.length() > 0) {

expressionString = expressionString.substring(0, len - 1); // 退格,将文本最后一个字符去掉

}

} else if (command.equals(keys[5])) {

// 用户按了"X^Y"键

expressionString += "^";

}else if (command.equals(keys[6])) {

// 用户按了"根号"键

expressionString += "√";

}else if (command.equals(keys[20])) {

expressionString += "_";

} else if (command.equals(keys[23])) {

cal.calculate(expressionString);

expressionString += command;

operation_flag = false;

} else {

expressionString += command;

}

}

else {

resultText.setText("Please press the C key");

}

String Str = expressionString;

Str = Str.replaceAll("_", "-");

expressionText.setText(Str);

}

public static void main(String[] args) {

new Calculator();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值