一、实验目的
1、掌握 Java 图形界面程序设计的基本思想和步骤。
2、掌握 JDK 中 AWT 包和 Swing 包的基本使用方法和区别。
3、掌握容器和布局的概念和使用。
4、掌握图形界面程序的界面设计方法和步骤。
二、实验类型
设计型
三、实验内容
1、自己编写所有代码,设计一个程序的界面。该程序的功能要求是:运行之后,界面要求基本如左 图所示。其中界面设计时的顶层容器要求使用 JFrame(或 Frame), 界面上的“简易计算器”、“运算数一”、“运算数二”、“运算结果” 这些提示标签使用组件 JLabel(或 Label),输入运算数和输出运 算结果使用 JTextField(或 TextField),“相加”、“相减”和“全 部清零”使用按钮 JButton(或 Button)。 请注意查阅 JDK 的 API 文档中这些相关的类,看看它们具有哪些构造函数可以用来生成 所需的对象,它们具有哪些方法可以用来进行调用。注意保存好 本次实验代码,下一次实验将会要求实现其事件处理以继续完善。
2、下面的左图和右图分别是 windows 系统中的标准型和科学型计算器的界面截图。打开你使用的微 软公司 Windows 操作系统或 Linux 等其它操作系统中自带的“计算器”软件,观察和参照其界面和功能, 实现一个接近其界面和功能的计算器(标准型或科学型)的界面。并保存好代码,在下一次实验中实现 其事件处理(即运算功能)。
四、代码
package 图形界面程序;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame {
private JLabel titleLabel;
private JLabel numberOneLabel;
private JLabel numberTwoLabel;
private JLabel resultLabel;
private JTextField numberOneTextField;
private JTextField numberTwoTextField;
private JTextField resultTextField;
private JButton addButton;
private JButton subtractButton;
private JButton clearButton;
public Calculator() {
// 设置窗口标题和大小
setTitle("简易计算器");
setSize(800, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(6, 3));
// 创建各个组件
titleLabel = new JLabel("简易计算器");
numberOneLabel = new JLabel("运算数一:");
numberTwoLabel = new JLabel("运算数二:");
resultLabel = new JLabel("运算结果:");
numberOneTextField = new JTextField();
numberTwoTextField = new JTextField();
resultTextField = new JTextField();
addButton = new JButton("相加");
subtractButton = new JButton("相减");
clearButton = new JButton("全部清零");
// 添加组件到窗口
add(titleLabel);
add(new JLabel());
add(numberOneLabel);
add(numberOneTextField);
add(numberTwoLabel);
add(numberTwoTextField);
add(resultLabel);
add(resultTextField);
add(addButton);
add(subtractButton);
add(clearButton);
// 为按钮添加点击事件监听器
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
calculate('+');
}
});
subtractButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
calculate('-');
}
});
clearButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
numberOneTextField.setText("");
numberTwoTextField.setText("");
resultTextField.setText("");
}
});
setVisible(true);
}
// 计算结果
private void calculate(char operator) {
String num1 = numberOneTextField.getText();
String num2 = numberTwoTextField.getText();
// 检查运算数是否输入
if (num1.isEmpty() || num2.isEmpty()) {
JOptionPane.showMessageDialog(this, "请输入运算数", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
// 检查运算数是否合法
if (!isNumber(num1) || !isNumber(num2)) {
JOptionPane.showMessageDialog(this, "请输入合法的数值", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
// 将字符串转换为浮点数
double number1 = Double.parseDouble(num1);
double number2 = Double.parseDouble(num2);
double result = 0;
if (operator == '+') {
result = number1 + number2;
} else if (operator == '-') {
result = number1 - number2;
}
// 显示结果
resultTextField.setText(String.valueOf(result));
}
// 判断字符串是否为合法的数值
private boolean isNumber(String str) {
// 检查是否包含非法字符
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c != '.' && (c < '0' || c > '9')) {
return false;
}
}
// 检查小数点个数和位置
if (str.indexOf('.') != str.lastIndexOf('.') ||
str.startsWith(".") || str.endsWith(".")) {
return false;
}
return true;
}
public static void main(String[] args) {
new Calculator();
}
}