在日常生活中,计算器是一种非常实用的工具。但是,随着科技的不断发展,计算器也被一些更先进的工具所取代。然而,对于程序员来说,编写自己的计算器不仅有利于提升技能,还可以方便日常工作。在这篇文章中,我将分享用Java编写的简易计算器源代码。
在开始编写代码之前,首先需要安装Java开发工具包(JDK)并配置相应的环境。如果您已经安装了Java开发工具包,请打开您最喜欢的代码编辑器(如Eclipse或IntelliJ IDEA)并开始编写代码。
第一步:创建项目并定义计算器UI
首先,我们需要创建一个新项目并定义计算器UI。在这个过程中,我们将使用Swing GUI组件来构建计算器UI并选择适当的布局管理器来设置组件位置。
在Java中,有许多种布局管理器可供选择,如GridLayout、FlowLayout、BorderLayout和BoxLayout等。在这里,我们将使用GridLayout来设置计算器UI的布局,因为它适用于具有等宽和等高的组件。
下面是我们定义计算器UI所需的代码:
```
import javax.swing.*;
import java.awt.*;
public class CalculatorUI {
public static void main(String[] args) {
JFrame frame = new JFrame("简易计算器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 4, 4, 4));
JButton button1 = new JButton("1");
button1.setPreferredSize(new Dimension(70, 50));
panel.add(button1);
JButton button2 = new JButton("2");
button2.setPreferredSize(new Dimension(70, 50));
panel.add(button2);
JButton button3 = new JButton("3");
button3.setPreferredSize(new Dimension(70, 50));
panel.add(button3);
JButton button4 = new JButton("+");
button4.setPreferredSize(new Dimension(70, 50));
panel.add(button4);
JButton button5 = new JButton("4");
button5.setPreferredSize(new Dimension(70, 50));
panel.add(button5);
JButton button6 = new JButton("5");
button6.setPreferredSize(new Dimension(70, 50));
panel.add(button6);
JButton button7 = new JButton("6");
button7.setPreferredSize(new Dimension(70, 50));
panel.add(button7);
JButton button8 = new JButton("-");
button8.setPreferredSize(new Dimension(70, 50));
panel.add(button8);
JButton button9 = new JButton("7");
button9.setPreferredSize(new Dimension(70, 50));
panel.add(button9);
JButton button10 = new JButton("8");
button10.setPreferredSize(new Dimension(70, 50));
panel.add(button10);
JButton button11 = new JButton("9");
button11.setPreferredSize(new Dimension(70, 50));
panel.add(button11);
JButton button12 = new JButton("*");
button12.setPreferredSize(new Dimension(70, 50));
panel.add(button12);
JButton button13 = new JButton("C");
button13.setPreferredSize(new Dimension(70, 50));
panel.add(button13);
JButton button14 = new JButton("0");
button14.setPreferredSize(new Dimension(70, 50));
panel.add(button14);
JButton button15 = new JButton("=");
button15.setPreferredSize(new Dimension(70, 50));
panel.add(button15);
JButton button16 = new JButton("/");
button16.setPreferredSize(new Dimension(70, 50));
panel.add(button16);
frame.add(panel);
frame.setVisible(true);
}
}
```
在上面的代码中,我们定义了一个名为“CalculatorUI”的类,并在其中创建了一个JFrame对象,利用GridLayout布局来创建了一个4行4列的网格布局,并使用JButton对象添加了16个按钮。
为了让每个按钮具有相同的大小,我们使用了setPreferredSize方法设置了所有按钮的大小为70x50。
我们还使用了frame.setVisible(true)来设置窗口可见。现在,我们已经完成了计算器UI的定义。接下来,我们将在UI中添加事件监听器来进行计算。
第二步:为每个按钮添加事件监听器
在上一步中,我们已经定义了我们的计算器UI。现在,我们需要为每个按钮添加事件监听器,以便我们可以在用户点击这些按钮时执行相应的操作。
在Java中,我们可以使用ActionListener接口来为按钮添加事件监听器,并覆盖actionPerformed方法来执行相应的操作。
下面是我们为计算器UI中的每个按钮定义事件监听器的代码:
```
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CalculatorUI implements ActionListener {
JFrame frame;
JTextField textField;
String input = "";
double number1, number2, result;
char operator;
public CalculatorUI() {
frame = new JFrame("简易计算器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5, 4, 4, 4));
textField = new JTextField();
textField.setEditable(false);
panel.add(textField);
JButton button1 = new JButton("1");
button1.setPreferredSize(new Dimension(70, 50));
button1.addActionListener(this);
panel.add(button1);
JButton button2 = new JButton("2");
button2.setPreferredSize(new Dimension(70, 50));
button2.addActionListener(this);
panel.add(button2);
JButton button3 = new JButton("3");
button3.setPreferredSize(new Dimension(70, 50));
button3.addActionListener(this);
panel.add(button3);
JButton button4 = new JButton("+");
button4.setPreferredSize(new Dimension(70, 50));
button4.addActionListener(this);
panel.add(button4);
JButton button5 = new JButton("4");
button5.setPreferredSize(new Dimension(70, 50));
button5.addActionListener(this);
panel.add(button5);
JButton button6 = new JButton("5");
button6.setPreferredSize(new Dimension(70, 50));
button6.addActionListener(this);
panel.add(button6);
JButton button7 = new JButton("6");
button7.setPreferredSize(new Dimension(70, 50));
button7.addActionListener(this);
panel.add(button7);
JButton button8 = new JButton("-");
button8.setPreferredSize(new Dimension(70, 50));
button8.addActionListener(this);
panel.add(button8);
JButton button9 = new JButton("7");
button9.setPreferredSize(new Dimension(70, 50));
button9.addActionListener(this);
panel.add(button9);
JButton button10 = new JButton("8");
button10.setPreferredSize(new Dimension(70, 50));
button10.addActionListener(this);
panel.add(button10);
JButton button11 = new JButton("9");
button11.setPreferredSize(new Dimension(70, 50));
button11.addActionListener(this);
panel.add(button11);
JButton button12 = new JButton("*");
button12.setPreferredSize(new Dimension(70, 50));
button12.addActionListener(this);
panel.add(button12);
JButton button13 = new JButton("C");
button13.setPreferredSize(new Dimension(70, 50));
button13.addActionListener(this);
panel.add(button13);
JButton button14 = new JButton("0");
button14.setPreferredSize(new Dimension(70, 50));
button14.addActionListener(this);
panel.add(button14);
JButton button15 = new JButton("=");
button15.setPreferredSize(new Dimension(70, 50));
button15.addActionListener(this);
panel.add(button15);
JButton button16 = new JButton("/");
button16.setPreferredSize(new Dimension(70, 50));
button16.addActionListener(this);
panel.add(button16);
frame.add(panel);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
String buttonText = ((JButton) e.getSource()).getText();
if(buttonText.matches("[0-9]")) {
input += buttonText;
textField.setText(input);
} else if(buttonText.matches("[+\\-*/]")) {
if(input.equals("")) {
return;
}
number1 = Double.parseDouble(input);
operator = buttonText.charAt(0);
input = "";
} else if(buttonText.equals("C")) {
input = "";
textField.setText("");
} else {
if(input.equals("")) {
return;
}
number2 = Double.parseDouble(input);
input = "";
switch (operator) {
case '+':
result = number1 + number2;
break;
case '-':
result = number1 - number2;
break;
case '*':
result = number1 * number2;
break;
case '/':
if(number2 == 0) {
textField.setText("错误");
return;
}
result = number1 / number2;
break;
}
textField.setText(Double.toString(result));
}
}
public static void main(String[] args) {
new CalculatorUI();
}
}
```
在上面的代码中,我们实现了ActionListener接口,并在类的构造函数中将当前对象添加为每个按钮的事件监听器。
在actionPerformed方法中,我们通过获取所点击按钮的文本内容来确定执行哪个操作。如果点击的是数字按钮(“0”到“9”),则将该数字添加到输入中,并在文本框中显示输入。
如果点击的是操作符按钮(“+”、“-”、“×”、“÷”),则使用Double.parseDouble()方法将输入转换为double类型,并将当前操作符存储在operator变量中。然后清空输入,以便用户输入第二个数字。
如果用户点击清除按钮(“C”),则清空输入,并在文本框中删除任何先前的输入。最后,如果用户点击等号按钮(“=”),则将输入转换为double类型,并根据存储的操作符执行相应的操作。
在执行完操作后,我们使用textField.setText()方法将结果显示在文本框中。
总结
在这篇文章中,我们介绍了如何使用Java编写一个简单的计算器,包括定义计算器UI和为每个按钮添加事件监听器。尽管这个计算器比较简单,但这是一个基本的模板,你可以根据自己的需求对其进行自定义和改进。通过编写自己的计算器,您可以增强自己的Java编程能力并提高自己的日常工作效率。