21xrx.com
2025-03-22 09:05:38 Saturday
文章检索 我的文章 写文章
Java图形界面编程:实现简易计算器
2023-06-14 23:16:01 深夜i     7     0
Java 图形界面 计算器

在Java编程中,图形界面是最为常用的操作方式之一。在本文中,我们将讲解如何使用Java进行图形界面的开发,并通过实现一个简易计算器的案例来加深理解。

首先,我们需要使用Java Swing框架中的组件来完成一个用户界面。下面是实现简易计算器的代码案例:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener {
  private JTextField tfResult;
  private JButton btnNum[] = new JButton[10];
  private JButton btnOp[] = new JButton[4];
  public Calculator() {
    setTitle("简易计算器");
    setSize(300, 200);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());
  
    JPanel panel1 = new JPanel();
    panel1.setLayout( new GridLayout(4, 3, 5, 5) );
    for (int i = 0; i < btnNum.length; i++) {
      btnNum[i] = new JButton(String.valueOf(i));
      btnNum[i].addActionListener(this);
      panel1.add(btnNum[i]);
    }
    panel1.add(new JLabel(""));
    panel1.add(btnNum[0]);
    panel1.add(new JLabel(""));
  
    JPanel panel2 = new JPanel();
    panel2.setLayout( new GridLayout(4, 1, 5, 5) );
    String[] op = { "+", "-", "*", "/" };
    for (int i = 0; i < btnOp.length; i++) {
      btnOp[i] = new JButton(op[i]);
      btnOp[i].addActionListener(this);
      panel2.add(btnOp[i]);
    }
  
    tfResult = new JTextField();
    tfResult.setHorizontalAlignment(JTextField.RIGHT);
    tfResult.setEditable(false);
    tfResult.setBackground(Color.WHITE);
  
    JPanel panel3 = new JPanel();
    panel3.setLayout(new BorderLayout());
    panel3.add(tfResult, BorderLayout.NORTH);
    panel3.add(panel1, BorderLayout.CENTER);
    panel3.add(panel2, BorderLayout.EAST);
    add(panel3);
  
    setVisible(true);
  }
  
  public void actionPerformed(ActionEvent ae) {
    for (int i = 0; i < btnNum.length; i++) {
      if (ae.getSource().equals(btnNum[i])) {
        tfResult.setText(tfResult.getText() + i);
      }
    }
    for (int i = 0; i < btnOp.length; i++) {
      if (ae.getSource().equals(btnOp[i])) {
        tfResult.setText(tfResult.getText() + btnOp[i].getText());
      }
    }
    if (ae.getActionCommand().equals("=")) {
      try {
        String result = String.valueOf(eval(tfResult.getText()));
        tfResult.setText(result);
      } catch (Exception ex) {
        tfResult.setText("Error");
      }
    }
    if (ae.getActionCommand().equals("C")) {
      tfResult.setText("");
    }
  }
  
  public static double eval(String str) {
    return new Object() {
      int index = -1, ch;
  
      void nextChar() {
        ch = (++index < str.length()) ? str.charAt(index) : -1;
      }
      boolean isBlank() {
        while (ch == ' ') nextChar();
        return false;
      }
      double parse() {
        nextChar();
        double x = parseExpression();
        if (index < str.length()) throw new RuntimeException("Unexpected: " + (char)ch);
        return x;
      }
      double parseExpression() {
        double x = parseTerm();
        for (;;) {
          if (isBlank()) continue;
          if (ch == '+') {
            nextChar();
            x += parseTerm();
          } else if (ch == '-') {
            nextChar();
            x -= parseTerm();
          } else {
            return x;
          }
        }
      }
      double parseTerm() {
        double x = parseFactor();
        for (;;) {
          if (isBlank()) continue;
          if (ch == '*') {
            nextChar();
            x *= parseFactor();
          } else if (ch == '/') {
            nextChar();
            x /= parseFactor();
          } else {
            return x;
          }
        }
      }
      double parseFactor() {
        double x;
        boolean negate = false;
        if (ch == '+' || ch == '-') {
          negate = (ch == '-');
          nextChar();
        }
        if (ch == '(') {
          nextChar();
          x = parseExpression();
          if (ch == ')') nextChar();
          else throw new RuntimeException("Expected: )");
        } else {
          StringBuilder sb = new StringBuilder();
          while ((ch >= '0' && ch <= '9') || ch == '.') {
            sb.append((char)ch);
            nextChar();
          }
          if (sb.length() == 0) throw new RuntimeException("Expected: number");
          x = Double.parseDouble(sb.toString());
        }
        return negate ? -x : x;
      }
    }.parse();
  }
  public static void main(String[] args) {
    Calculator calc = new Calculator();
  }
}

上述代码中,我们使用了JFrame作为计算器的主窗口,并使用了JTextField、JButton、JPanel等Swing组件来完成界面的布局。同时,我们在实现计算器功能时,使用了eval方法来实现算术表达式的运算。

通过上面的代码案例,我们可以发现在Java中,使用Swing框架进行图形界面的设计非常简单,同时Java语言的表达式计算功能也非常出色。相信这些内容能够为大家的Java学习和实践带来很大帮助。

  
  

评论区