1.实训目的
通过一个计算器的设计来综合运用所学的相关知识(Java的数据类型、AWT包、用户自定义类、窗体的布局、方法的定义和添加事件处理)。
2.实训内容与要求
编写一个简易的计算器程序。用户可以利用鼠标单击数值或操作符按钮完成计算,计算的结果被显示在窗口上部的文本框中,
设计界面如图所示
4. 实训步骤与内容
(1)新建一个应用程序,类名为"Calculator",该类继承了 JFrame类。添加构造方法完成对窗体的标题栏、大小、定位等初始化的设置。代码如下:
import javax.swing.JFrame;
public class Calculator extends JFrame implements ActionListener {
public Calculator() {
setTitle("计算器");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 400);
setLocation(500,300);
setVisible(true);
}
public static void main(String[] args) {
Calculator calculator=new Calculator();
}
}
(2)设置了一个用于显示的JTextField,并创建了一个包含各种按钮的按钮面板,用于执行计算器操作。按钮包括基本的算术运算,以及诸如平方根、幂、百分比和倒数等功能。另外,还有一个“C”按钮,用于清除。
display = new JTextField("0");
currentInput = 0;
currentOperator = "";
startNewInput = true;
JPanel buttonPanel = new JPanel(new GridLayout(6, 4, 5, 5));
String[] buttonLabels = {
"sqrt","pow","%","1/x",
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
".", "0", "=", "+",
"C"
};
for (String label : buttonLabels) {
JButton button = new JButton(label);
button.addActionListener(this);
buttonPanel.add(button);
}
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(display, BorderLayout.NORTH);
contentPane.add(buttonPanel, BorderLayout.CENTER);
}
(3)添加一个事件处理方法,用于处理计算器按钮的点击事件。根据按钮的不同命令,它执行不同的操作。以下是它的功能描述:
- 如果点击的是数字按钮,则根据是否需要开始新的输入,更新显示的内容。
- 如果点击的是加减乘除按钮,则将当前显示的数字作为输入,并记录当前的操作符,准备接收下一个输入。
- 如果点击的是等号按钮,则根据之前记录的操作符执行相应的计算,更新显示的内容,并准备接收下一个输入。
- 如果点击的是清除按钮,则将显示内容重置为0,同时清空之前记录的输入和操作符。
- 如果点击的是平方根、幂、百分比或倒数按钮,则根据当前显示的数字执行相应的数学运算,并更新显示的内容。
代码如下:
public void actionPerformed(ActionEvent e) {
String action = e.getActionCommand();
if (action.matches("[0-9]")) {
if (startNewInput) {
display.setText(action);
startNewInput = false;
} else {
if (!action.equals(".")) {
display.setText(display.getText() + action);
} else {
if (!display.getText().contains(".")) {
display.setText(display.getText() + ".");
}
}
}
} else if (action.matches("[+\\-*/]")) {
currentInput = Double.parseDouble(display.getText());
currentOperator = action;
startNewInput = true;
} else if (action.equals("=")) {
double newInput = Double.parseDouble(display.getText());
if (currentOperator.equals("+")) {
currentInput += newInput;
} else if (currentOperator.equals("-")) {
currentInput -= newInput;
} else if (currentOperator.equals("*")) {
currentInput *= newInput;
} else if (currentOperator.equals("/")) {
currentInput /= newInput;
}
display.setText(String.valueOf(currentInput));
startNewInput = true;
} else if (action.equals("C")) {
display.setText("0");
currentInput = 0;
currentOperator = "";
startNewInput = true;
} else if (action.equals("sqrt")) {
double value = Double.parseDouble(display.getText());
display.setText(String.valueOf(Math.sqrt(value)));
} else if (action.equals("pow")) {
double value = Double.parseDouble(display.getText());
display.setText(String.valueOf(Math.pow(value, 2)));
} else if (action.equals("%")) {
double value = Double.parseDouble(display.getText());
display.setText(String.valueOf(value / 100));
} else if (action.equals("1/x")) {
double value = Double.parseDouble(display.getText());
display.setText(String.valueOf(1 / value));
} else if (action.equals(".")) {
if (!display.getText().contains(".")) {
display.setText(display.getText() + ".");
}
}
}
有什么问题可以互相讨论,互相学习,与君共勉~~~