import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class Testcacluate extends JFrame{
JTextArea fi=new JTextArea(1,20);
LinkedList<String> yunsuanfu=new LinkedList<>();
LinkedList<Integer> numbers=new LinkedList<>();
int outcome;
public Testcacluate() throws HeadlessException {
setTitle("简易计算器");
Container con=getContentPane();
setBounds(200, 200, 300, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
con.setLayout(null);
//创建显示区域
fi.setBorder(BorderFactory.createLineBorder(Color.black, 3, true));
fi.setFont(new Font("楷体",Font.BOLD,20));
JPanel jp=new JPanel();
jp.setLayout(new FlowLayout());
jp.add(fi);
jp.setBorder(BorderFactory.createTitledBorder("显示区"));
con.add(jp);
jp.setBounds(0, 0, 280, 60);
//创建键盘区
JPanel jp1=new JPanel();
jp1.setBorder(BorderFactory.createTitledBorder("键盘区"));
jp1.setLayout(new GridLayout(4, 4, 5, 5));
for(int i=0;i<10;i++) {
JButton jb=new JButton(""+i);
jb.setBorder(BorderFactory.createLineBorder(Color.pink, 3, true));
jb.setFont(new Font("楷体", Font.PLAIN, 20));
jp1.add(jb);
jb.addActionListener(new MyActionListener());
}
//创建加号按钮
JButton jb1=new JButton("+");
jb1.setBorder(BorderFactory.createLineBorder(Color.green, 3, true));
jb1.setFont(new Font("楷体", Font.PLAIN, 20));
jp1.add(jb1);
jb1.addActionListener(new MyActionListener());
//创建减号按钮
JButton jb2=new JButton("-");
jb2.setBorder(BorderFactory.createLineBorder(Color.green, 3, true));
jb2.setFont(new Font("楷体", Font.PLAIN, 20));
jp1.add(jb2);
jb2.addActionListener(new MyActionListener());
//创建乘号按钮
JButton jb3=new JButton("*");
jb3.setBorder(BorderFactory.createLineBorder(Color.green, 3, true));
jb3.setFont(new Font("楷体", Font.PLAIN, 20));
jp1.add(jb3);
jb3.addActionListener(new MyActionListener());
//创建除号按钮
JButton jb4=new JButton("/");
jb4.setBorder(BorderFactory.createLineBorder(Color.green, 3, true));
jb4.setFont(new Font("楷体", Font.PLAIN, 20));
jp1.add(jb4);
jb4.addActionListener(new MyActionListener());
//创建等于号按钮
JButton jb5=new JButton("=");
jb5.setBorder(BorderFactory.createLineBorder(Color.green, 3, true));
jb5.setFont(new Font("楷体", Font.PLAIN, 20));
jp1.add(jb5);
jb5.addActionListener(new MyActionListener());
//创建清零按钮
JButton jb6=new JButton("清零");
jb6.setBorder(BorderFactory.createLineBorder(Color.green, 3, true));
// jb6.setFont(new Font("楷体", Font.PLAIN, 20));
jp1.add(jb6);
jb6.addActionListener(new MyActionListener());
jp1.setBounds(0, 65, 280, 280);
con.add(jp1);
setVisible(true);
}
//实现ActionListener接口
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {//监听
JButton jb=(JButton)e.getSource();
String s=jb.getText();
if(s.charAt(0)>='0'&&s.charAt(0)<='9') {
fi.append(s);
}
else if(s.charAt(0)=='+') {
int num=Integer.parseInt(fi.getText());
numbers.add(num);
yunsuanfu.add("+");
fi.setText("");
}else if(s.charAt(0)=='-') {
int num=Integer.parseInt(fi.getText());
numbers.add(num);
yunsuanfu.add("-");
fi.setText("");
}else if(s.charAt(0)=='*') {
int num=Integer.parseInt(fi.getText());
numbers.add(num);
yunsuanfu.add("*");
fi.setText("");
}else if(s.charAt(0)=='/') {
int num=Integer.parseInt(fi.getText());
numbers.add(num);
yunsuanfu.add("/");
fi.setText("");
}else if(s.charAt(0)=='=') {
int num=Integer.parseInt(fi.getText());
numbers.add(num);
outcome=numbers.poll();
while(!numbers.isEmpty()||!yunsuanfu.isEmpty()) {
String s1=yunsuanfu.poll();
Integer in=numbers.poll();
if(s1.charAt(0)=='+') {
outcome+=in;
}else if(s1.charAt(0)=='-') {
outcome-=in;
}else if(s1.charAt(0)=='*') {
outcome*=in;
}else {
outcome/=in;
}
}
fi.setText(""+outcome);
}else {//清零
fi.setText("");
}
}
}
public static void main(String[] args) {
new Testcacluate();
}
}
由于水平有限,还没能实现按优先级来实现