21xrx.com
2024-11-22 08:24:04 Friday
登录
文章检索 我的文章 写文章
作为一名Java程序员
2023-06-10 19:10:07 深夜i     --     --
Java 计算器 界面设计

作为一名Java程序员,我经常需要编写一些简单的应用程序。今天,我想分享一下我编写的一个简易计算器界面代码。

首先,我用Swing组件创建了一个简单的界面。在界面中,我添加了一个文本框用于显示计算结果,以及一些按钮用于输入数字和运算符。


import javax.swing.*;

import java.awt.*;

public class CalculatorGUI extends JFrame {

  private JTextField resultField;

  public CalculatorGUI() {

    super("Simple Calculator");

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    resultField = new JTextField(20);

    resultField.setEditable(false);

    resultField.setHorizontalAlignment(JTextField.RIGHT);

    JPanel buttonPanel = new JPanel(new GridLayout(4, 4));

    String[] buttonLabels = {

        "7", "8", "9", "/",

        "4", "5", "6", "*",

        "1", "2", "3", "-",

        "0", ".", "=", "+"

    };

    for (String label : buttonLabels) {

      JButton button = new JButton(label);

      button.addActionListener((e -> {

        String buttonText = button.getText();

        switch (buttonText) {

          case "=":

            String expression = resultField.getText();

            double result = Calculator.evaluate(expression);

            resultField.setText(Double.toString(result));

            break;

          default:

            resultField.setText(resultField.getText() + buttonText);

        }

      }));

      buttonPanel.add(button);

    }

    JPanel content = new JPanel(new BorderLayout());

    content.add(resultField, BorderLayout.NORTH);

    content.add(buttonPanel, BorderLayout.CENTER);

    setContentPane(content);

    pack();

    setLocationRelativeTo(null);

    setResizable(false);

  }

  public static void main(String[] args) {

    CalculatorGUI calculatorGUI = new CalculatorGUI();

    calculatorGUI.setVisible(true);

  }

}

在这段代码中,我创建了一个继承自JFrame的CalculatorGUI类,它是整个应用程序的主窗口。在构造函数中,我初始化了界面的各个组件,并设置了它们的布局和样式。我还为所有的按钮添加了一个ActionListener,用于监听按钮的点击事件。

接下来,我编写了一个用于计算表达式结果的Calculator类。这个类提供了一个静态方法evaluate,它接受一个字符串类型的表达式参数,返回其计算结果。


import java.util.Stack;

public class Calculator {

  public static double evaluate(String expression) {

    Stack operatorStack = new Stack<>();

    Stack operandStack = new Stack<>();

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

      char ch = expression.charAt(i);

      if (Character.isDigit(ch)) {

        double num = ch - '0';

        while (i + 1 < expression.length() && Character.isDigit(expression.charAt(i + 1))) {

          num = num * 10 + expression.charAt(i + 1) - '0';

          i++;

        }

        operandStack.push(num);

      } else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {

        while (!operatorStack.empty() && precedence(operatorStack.peek()) >= precedence(ch)) {

          double b = operandStack.pop();

          double a = operandStack.pop();

          char op = operatorStack.pop();

          operandStack.push(applyOp(a, b, op));

        }

        operatorStack.push(ch);

      }

    }

    while (!operatorStack.empty()) {

      double b = operandStack.pop();

      double a = operandStack.pop();

      char op = operatorStack.pop();

      operandStack.push(applyOp(a, b, op));

    }

    return operandStack.pop();

  }

  private static double applyOp(double a, double b, char op) {

    switch (op) {

      case '+':

        return a + b;

      case '-':

        return a - b;

      case '*':

        return a * b;

      case '/':

        if (b == 0)

          throw new UnsupportedOperationException("Cannot divide by zero");

        else

          return a / b;

    }

    return 0;

  }

  private static int precedence(char op) {

    if (op == '+' || op == '-')

      return 1;

    else if (op == '*' || op == '/')

      return 2;

    return 0;

  }

}

在这个Calculator类中,我使用了栈来实现一个基本的算术表达式求值算法。该算法可以解析一个字符串类型的算术表达式,并计算其结果。在计算表达式结果的过程中,我使用了两个栈,一个操作数栈和一个操作符栈。

最后,我在main方法中创建了一个CalculatorGUI对象,并使其可见。这样,我就完成了一个简单的计算器应用程序的编写。

总之,Java是一种非常强大的编程语言,它可以轻松地编写出各种应用程序。在编写这个简易计算器界面代码的过程中,我学到了很多关于Java编程和界面设计的知识。我相信,这个计算器应用程序的代码可以帮助你更好地理解Java编程的底层原理,并提升你的编程技能。

标题:Java编写简易计算器界面代码。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复