实验内容:
学习GUI图形界面的设计Java Swing/Awt,创建交互友好的应用程序;
能通过界面按钮控件输入并实现算术表达式,输入的表达式即时在控件中显示,按下“=”按钮能实现运算,并将运算结果输出在控件中显示;要求能保存和浏览历史表达式的运算记录。
算术表达式求解,是指算术表达式中包括加、减、乘、除、括号等运算符,能求解包含括号的四则混合运算;并且能够检验表达式的合法性。
实现效果:
实现思路
利用swing创建一个窗体,设计按键布局等,设置按键监听,将按键的输入信息转成String类型,
然后将输入的中缀表达式转化为后缀表达式并且计算结果。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class getStart extends JFrame{
private boolean point_jud=true;//小数点合法性判断,true为可以输入小数点
private boolean sym_jud =false;//运算符号合法性判断
// 括号合法性判断,右括号数目小于左括号数目-1才能输入
private int sym_l=0;
private int sym_r=0;
public String str;
private JButton lpt;
private JButton rpt;
private JPanel panel1;
private JButton answer;
private JButton button_add;
private JButton button_sub;
private JButton Button_mul;
private JButton button_div;
private JButton delete;
private JButton Button1;
private JButton Button2;
private JButton Button3;
private JButton Button4;
private JButton Button5;
private JButton Button6;
private JButton Button7;
private JButton Button8;
private JButton Button9;
private JButton Button0;
public JTextArea output0;
public JTextArea input0;
private JTextArea textArea1;
private JButton deleteALL;
private JButton point;
Calculator infix;
public getStart() {
textArea1.setLineWrap(true);
infix=new Calculator();
System.out.println(str);
lpt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sym_l += 1;
input0.setText(input0.getText()+"(");
}
});
rpt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(sym_r<=sym_l-1){
input0.setText(input0.getText()+")");
sym_r+=1;
}
}
});
delete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
char add='+',sub='-',div='/',mul='*';
String str = input0.getText();
StringBuilder str2 = new StringBuilder();
for (int i = 0; i < (str.length() - 1); i++) {
str2.append(str.charAt(i));
}
if (str2.toString().equals("")) {
input0.setText("");
} else {
input0.setText(str2.toString());
}
if(str.charAt(str.length()-1)==add||str.charAt(str.length()-1)==sub||str.charAt(str.length()-1)==div||str.charAt(str.length()-1)==mul)sym_jud=true;
else sym_jud=false;
}
});
Button0.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"0");
sym_jud =true;
}
});
Button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"1");
sym_jud =true;
}
});
Button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"2");
sym_jud =true;
}
});
Button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"3");
sym_jud =true;
}
});
Button4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"4");
sym_jud =true;
}
});
Button5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"5");
sym_jud =true;
}
});
Button6.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"6");
sym_jud =true;
}
});
Button7.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"7");
sym_jud =true;
}
});
Button8.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"8");
sym_jud =true;
}
});
Button9.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
input0.setText(input0.getText()+"9");
sym_jud =true;
}
});
button_add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(sym_jud)input0.setText(input0.getText()+"+");
sym_jud =false;
point_jud=true;
}
});
button_sub.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(sym_jud)
input0.setText(input0.getText()+"-");
sym_jud =false;
point_jud=true;
}
});
Button_mul.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(sym_jud) input0.setText(input0.getText()+"*");
sym_jud =false;
point_jud=true;
}
});
button_div.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(sym_jud) input0.setText(input0.getText()+"/");
sym_jud =false;
point_jud=true;
}
});
answer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
point_jud=true;
sym_jud =true;
str=input0.getText();
output0.setText(infix.test(str));
textArea1.setText(textArea1.getText()+input0.getText()+"="+output0.getText()+'\n');
input0.setText("");
}
});
deleteALL.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
point_jud=true;
sym_jud =true;
input0.setText("");output0.setText("");textArea1.setText("");
}
});
point.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(point_jud){input0.setText(input0.getText()+".");
point_jud=false;
}
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame("计算器已经运行---BY ymg");
frame.setContentPane(new getStart().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}