目录
一、系统设计
1.1 总体目标
1.2 主体功能介绍
二、项目详细设计
2.1 界面设计
2.2 主体类
2.3 数字按钮设计
2.4 功能按钮设计
三、整体代码
四、运行结果
一、系统设计
1.1 总体目标
- 具有基本的数学运算功能,如加减乘除等。
- 界面上方有一个文本输入框,用户输入操作数并展示最终的运算结果。
- 用户仅可以利用鼠标点击数值或操作符按键完成计算的输入,不能通过键盘进行输入。
1.2 主体功能介绍
- 按下数字键,在文本框上会显示数字。
- 按下数字键和符号按键,能进行加减乘除运算。
- 按下清除键,文本框中的数据将被全部清除。
二、项目详细设计
2.1 界面设计
总体界面采用空布局的方式,调用每个组件中的setBounds()方法来指定每一个组件的位置。
2.2 主体类
项目中的主体类为Calculate类,继承JFrame类和ActionListener接口,并实现actionPerformed()方法,用来获取事件对象。
在Calculate类中主要用来实现程序的主题框架,如创建面板、布局方式、窗口属性设置等,其参考代码如下:
public calculate() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("计算器实战");
setBounds(100,100,400,250);
contentPane = new JPanel();//创建面板
contentPane.setBorder(new EmptyBorder(5,5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
textField = new JTextField();//创建输入框,用来输入数据
textField.setBounds(100, 30, 240, 20);
contentPane.add(textField);
textField.setColumns(10);
textField.setEditable(false);//设定输入框不能手动输入
}
在项目中,main()方法用来创建Calculate的对象,并且将Frame设置为可见。其目的是能够使用户看到设计好的界面,具体内容如下:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// TODO 自动生成的方法存根
try {
calculate frame = new calculate();//创建窗口
frame.setVisible(true);
}catch(Exception e) {
e.printStackTrace();
}
}
});
}
2.3 数字按钮设计
对于数字按钮0-9来说,其作用是将对应的数字输入到输入框textField中,因此在创建时需要同时指定监听事件,实现数字的添加。数字按钮7的参考代码如下:
button_7 = new JButton("7");//创建数字按钮7
button_7.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+7);
}
});
button_7.setBounds(104, 99, 50, 25);
contentPane.add(button_7);
2.4 功能按钮设计
功能按钮需要添加对应的功能。例如加法按钮,需要完成第一次输入的数值和第二次输入的数值之和,并且要将运算结果显示到文本框中,参考代码如下:
button_add = new JButton("+");//创建加法按钮
button_add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
flag = 0;
number1 = Integer.parseInt(textField.getText());
textField.setText(null);
}
});
button_add.setBounds(104, 66, 50, 23);
contentPane.add(button_add);
对于其他的运算按钮,其操作大体相同。对于等号按钮来说,需要判断输入的符号是何种操作符,并且进行计算和结果展示,参考代码如下:
button_eql = new JButton("=");//创建等号按钮
button_eql.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
number2 = Integer.parseInt(textField.getText());
if(flag == 0) {
result = number1 + number2;
textField.setText(String.valueOf(result));
}else if(flag == 1) {
result = number1 - number2;
textField.setText(String.valueOf(result));
}else if(flag == 2) {
result = number1 * number2;
textField.setText(String.valueOf(result));
}else if(flag == 3) {
result = number1 / number2;
textField.setText(String.valueOf(result));
}
}
});
button_eql.setBounds(286, 102, 50,25);
contentPane.add(button_eql);
在等号按钮的监听事件中,使用flag变量来标识进行何种操作,并将计算结果展示在输入框中,从而完成整个运算操作。
三、整体代码
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.event.*;
public class calculate extends JFrame{
int number1;//保存第一个输入数
int number2;//保存第二个输入数
int flag;//保存进行何种操作
int result;//保存执行结果
private JPanel contentPane;
private JTextField textField;
private JButton button_0;
private JButton button_1;
private JButton button_2;
private JButton button_3;
private JButton button_4;
private JButton button_5;
private JButton button_6;
private JButton button_7;
private JButton button_8;
private JButton button_9;//数字按键
private JButton button_sub;//减法
private JButton button_div;//除法
private JButton button_eql;//等号
private JButton button_add;//加法
private JButton button_mul;//乘法
private JButton btnClear;//清除
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// TODO 自动生成的方法存根
try {
calculate frame = new calculate();//创建窗口
frame.setVisible(true);
}catch(Exception e) {
e.printStackTrace();
}
}
});
}
public calculate() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("计算器实战");
setBounds(100,100,400,250);
contentPane = new JPanel();//创建面板
contentPane.setBorder(new EmptyBorder(5,5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
textField = new JTextField();//创建输入框,用来输入数据
textField.setBounds(100, 30, 240, 20);
contentPane.add(textField);
textField.setColumns(10);
textField.setEditable(false);//设定输入框不能手动输入
button_sub = new JButton("-");//创建减法按钮
button_sub.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
flag = 1;
number1 = Integer.parseInt(textField.getText());
textField.setText(null);
}
});
button_sub.setBounds(164, 66, 52, 23);
contentPane.add(button_sub);
button_div = new JButton("/");//创建除法按钮
button_div.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
flag = 3;
number1 = Integer.parseInt(textField.getText());
textField.setText(null);
}
});
button_div.setBounds(286, 66, 52, 23);
contentPane.add(button_div);
button_mul = new JButton("*");//创建乘法按钮
button_mul.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
flag = 2;
number1 = Integer.parseInt(textField.getText());
textField.setText(null);
}
});
button_mul.setBounds(226, 66, 52, 23);
contentPane.add(button_mul);
button_add = new JButton("+");//创建加法按钮
button_add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
flag = 0;
number1 = Integer.parseInt(textField.getText());
textField.setText(null);
}
});
button_add.setBounds(104, 66, 50, 23);
contentPane.add(button_add);
button_1 = new JButton("1");//创建数字按钮1
button_1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+1);
}
});
button_1.setBounds(104, 165, 50, 25);
contentPane.add(button_1);
button_2 = new JButton("2");//创建数字按钮2
button_2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+2);
}
});
button_2.setBounds(164, 165, 50, 25);
contentPane.add(button_2);
button_3 = new JButton("3");//创建数字按钮3
button_3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+3);
}
});
button_3.setBounds(226, 165, 50, 25);
contentPane.add(button_3);
button_4 = new JButton("4");//创建数字按钮4
button_4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+4);
}
});
button_4.setBounds(104, 133, 50, 25);
contentPane.add(button_4);
button_5 = new JButton("5");//创建数字按钮5
button_5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+5);
}
});
button_5.setBounds(164, 133, 50, 25);
contentPane.add(button_5);
button_6 = new JButton("6");//创建数字按钮6
button_6.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+6);
}
});
button_6.setBounds(226, 133, 50, 25);
contentPane.add(button_6);
button_7 = new JButton("7");//创建数字按钮7
button_7.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+7);
}
});
button_7.setBounds(104, 99, 50, 25);
contentPane.add(button_7);
button_8 = new JButton("8");//创建数字按钮8
button_8.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+8);
}
});
button_8.setBounds(164, 99, 50, 25);
contentPane.add(button_8);
button_9 = new JButton("9");//创建数字按钮9
button_9.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+9);
}
});
button_9.setBounds(226, 99, 50, 25);
contentPane.add(button_9);
button_0 = new JButton("0");//创建数字按钮0
button_0.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
textField.setText(textField.getText()+0);
}
});
button_0.setBounds(286, 165, 50, 23);
contentPane.add(button_0);
button_eql = new JButton("=");//创建等号按钮
button_eql.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
number2 = Integer.parseInt(textField.getText());
if(flag == 0) {
result = number1 + number2;
textField.setText(String.valueOf(result));
}else if(flag == 1) {
result = number1 - number2;
textField.setText(String.valueOf(result));
}else if(flag == 2) {
result = number1 * number2;
textField.setText(String.valueOf(result));
}else if(flag == 3) {
result = number1 / number2;
textField.setText(String.valueOf(result));
}
}
});
button_eql.setBounds(286, 102, 50,25);
contentPane.add(button_eql);
btnClear = new JButton("CE");//创建清空按钮
btnClear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
number1 = 0;
number2 = 0;
result = 0;
textField.setText(null);
}
});
btnClear.setBounds(286,134,50,25);
contentPane.add(btnClear);
}
}