21xrx.com
2024-09-19 09:52:26 Thursday
登录
文章检索 我的文章 写文章
Java图形界面编程:实现简易计算器
2023-06-14 23:16:01 深夜i     --     --
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学习和实践带来很大帮助。

  
  

评论区

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