需求分析
Java实现一个计算器界面小程序,如下图所示:
代码实现
Calculator类
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator {
private String num1="";
private String num="";
private String oper="+";//存运算符
private JTextField outField;
public Calculator(){
JFrame frame=new JFrame();
frame.setSize(450,450);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());//Border布局
outField=new JTextField();
outField.setFont(new Font("微软雅黑",Font.BOLD,35));
outField.setHorizontalAlignment(JTextField.RIGHT);
frame.add(outField,BorderLayout.NORTH);
JPanel panel=new JPanel();
panel.setLayout(new GridLayout(4, 4,6,3));//栅格布局
frame.add(panel,BorderLayout.CENTER);
// String num="";//错误
JButton c_btnButton=new JButton("Clear");
c_btnButton.setFont(new Font("微软雅黑",Font.BOLD,35));
c_btnButton.setHorizontalAlignment(JTextField.CENTER);
frame.add(c_btnButton,BorderLayout.SOUTH);
c_btnButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
outField.setText("");
num1=num;
num="";
}
});
String[] btnStr = new String[]
{ "7","8","9","/","4","5","6","*",
"1","2","3","-","0",".","=","+"};
// 遍历btnStr
for(String str:btnStr) {
JButton btn=new JButton(str);
btn.setFont(new Font("微软雅黑",Font.BOLD,25));
btn.addActionListener(new ActionListener() {
//事件
@Override
public void actionPerformed(ActionEvent e) {
String cmd=e.getActionCommand();
if("+-*/".contains(cmd)) {
oper=cmd;
if(num1.isEmpty()) {
num1=num;
num="";
}else {
calculate();
num1=num;
num="";
}
}else if("=".equals(cmd)) {
calculate();
}else if(".".equals(cmd)) {
if(num.contains(".")) {
return;
}
num+=cmd;
outField.setText(num);
}
else {//数字 字符串拼接
num+=cmd;
outField.setText(num);
}
System.out.println(e.getActionCommand());
}
});
panel.add(btn);
}
frame.setVisible(true);
}
private void calculate() {
if(num1.isEmpty()||num.isEmpty()) {
return;
}
Double result=0d;
System.out.println(num1+oper+num);
switch (oper) {
case "+": result=Double.valueOf(num1)+Double.valueOf(num);
break;
case "-": result=Double.valueOf(num1)-Double.valueOf(num);
break;
case "*": result=Double.valueOf(num1)*Double.valueOf(num);
break;
case "/": result=Double.valueOf(num1)/Double.valueOf(num);
break;
}
num1=String.valueOf(result);
num="";
// System.out.println(num1);
outField.setText(String.valueOf(result));
}
public static void main(String[] args) {
new Calculator();
}
}
实验总结
- 类的定义与使用
- 计算器表达式的处理,结果的计算
- 为button添加点击事件