import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
/**
* 我的计算器.Cheshi 继承于 JFrame,是计算器的界面
c*/
public class Cheshi extends JFrame {
private JTextField textbox = new JTextField("0");
private CalculatorCore core = new CalculatorCore();
private ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
String label = b.getText();
String result = core.process(label);
textbox.setText(result);
}
};
public Cheshi(String title) throws HeadlessException {
super(title); // 调用父类构造方法
setupFrame(); // 调整窗体属性
setupControls(); // 创建控件
private void setupControls() {
setupDisplayPanel(); // 创建文本面板
setupButtonsPanel(); // 创建按钮面板
// 创建按钮面板并添加按钮
private void setupButtonsPanel() {
JPanel panel = new JPanel();
panel.setBorder(border);
createButtons(panel, new String[]{
"0", ".", "=", "/", ""
});
this.add(panel, BorderLayout.CENTER);
* 在指定的面板上创建按钮
*
* @param panel 要创建按钮的面板
* @param labels 按钮文字
*/
private void createButtons(JPanel panel, String[] labels) {
for (String label : labels) {
// 如果 label 为空,则表示创建一个空面板.否则创建一个按钮.
if (label.equals("")) {
panel.add(new JPanel());
} else {
JButton b = new JButton(label);
b.addActionListener(listener); // 为按钮添加侦听器
panel.add(b);
// 设置显示面板,用一个文本框来作为计算器的显示部分.
private void setupDisplayPanel() {
panel.setLayout(new BorderLayout());
setupTextbox();
panel.add(textbox, BorderLayout.CENTER);
this.add(panel, BorderLayout.NORTH);
// 调整文本框
private void setupTextbox() {
textbox.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐
textbox.setEditable(false); // 文本框只读
textbox.setBackground(Color.white); // 文本框背景色为白色
// 调整窗体
private void setupFrame() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE); // 当窗体关闭时程序结束
this.setResizable(false); // 窗体大小固定
// 程序入口
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Cheshi frame = new Cheshi("我的计算器");
frame.setVisible(true); // 在桌面上显示窗体
class CalculatorCore {
boolean reset = true;
private String operator;
private HashMapString, Operator operators = new HashMapString, Operator();
private HashMapString, Processor processors = new HashMapString, Processor();
CalculatorCore() {
setupOperators();
setupProcessors();
// 为每种命令添加处理方式
private void setupProcessors() {
public void calculate(String command) {
numberClicked(command);
processors.put("\\.", new Processor() {
dotClicked();
processors.put("=", new Processor() {
equalsClicked();
processors.put("[+\\-*/]", new Processor() {
operatorClicked(command);
processors.put("C", new Processor() {
clearClicked();
processors.put("CE", new Processor() {
clearErrorClicked();
// 为每种 operator 添加处理方式
private void setupOperators() {
operators.put("+", new Operator() {
operators.put("-", new Operator() {
operators.put("*", new Operator() {
operators.put("/", new Operator() {
// 根据命令处理.这里的命令实际上就是按钮文本.
public String process(String command) {
for (String pattern : processors.keySet()) {
if (command.matches(pattern)) {
processors.get(pattern).calculate(command);
break;
// 当按下 CE 时
private void clearErrorClicked() {
if (operator == null) {
number1 = null;
reset = true;
// 当按下 C 时,将计算器置为初始状态.
private void clearClicked() {
operator = null;
// 当按下 = 时
private void equalsClicked() {
calculateResult();
// 计算结果
private void calculateResult() {
Operator oper = operators.get(operator);
if (oper != null) {
// 当按下 +-*/ 时(这里也可以扩展成其他中间操作符)
private void operatorClicked(String command) {
if (operator != null) {
operator = command;
// 当按下 . 时
private void dotClicked() {
} else if (reset) {
reset = false;
private void numberClicked(String command) {
if (reset) {
// 运算符处理接口
interface Operator {
// 按钮处理接口
interface Processor {
void calculate(String command);
这段代码对你有帮助
* 我的计算器.MyCalculator 继承于 JFrame,是计算器的界面
public class MyCalculator extends JFrame {
public MyCalculator(String title) throws HeadlessException {
MyCalculator frame = new MyCalculator("我的计算器");
以上就是土嘎嘎小编为大家整理的java显示计算器代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!