第一次实现的计算器,虽然后面功能有增加但不舍得删这个版本
package test3;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Calculate extends JFrame{
public static void main(String[] args) {
Calculate cal=new Calculate();
}
JButton jbnum[];
JButton jboper[];
JPanel jp;
GridLayout grid;
BorderLayout border;
JTextField jt;
int x,y;
char op;
Calculate(){
init();
this.setSize(300, 300);
this.setLocation(300,300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(){
jbnum=new JButton[10];
for(int i=0;i<10;i++)
jbnum[i]=new JButton(i+"");
jboper=new JButton[6];
jboper[0]=new JButton("+");
jboper[1]=new JButton("-");
jboper[2]=new JButton("*");
jboper[3]=new JButton("/");
jboper[4]=new JButton("=");
jboper[5]=new JButton("BackSpace");
jp=new JPanel();
grid=new GridLayout(4,4);
border=new BorderLayout();
jt=new JTextField();
jp.setLayout(grid);
jp.add(jbnum[9]);
jp.add(jbnum[8]);
jp.add(jbnum[7]);
jp.add(jboper[5]);
jp.add(jbnum[6]);
jp.add(jbnum[5]);
jp.add(jbnum[4]);
jp.add(jboper[0]);
jp.add(jbnum[3]);
jp.add(jbnum[2]);
jp.add(jbnum[1]);
jp.add(jboper[1]);
jp.add(jbnum[0]);
jp.add(jboper[2]);
jp.add(jboper[3]);
jp.add(jboper[4]);
this.setLayout(border);
this.add(jp,BorderLayout.CENTER);
this.add(jt,BorderLayout.NORTH);
numButtonListener numListener=new numButtonListener();
for(int i=0;i<10;i++)
jbnum[i].addActionListener(numListener);
operButtonListener operListener=new operButtonListener();
for(int i=0;i<4;i++)
jboper[i].addActionListener(operListener);
backSpaceButtonListener backSpaceListener=new backSpaceButtonListener();
jboper[5].addActionListener(backSpaceListener);
equalButtonListener equalListener=new equalButtonListener();
jboper[4].addActionListener(equalListener);
}
class numButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String s=jt.getText();
boolean flag=false;
for(int i=0;i<10;i++)
if(e.getSource() == jbnum[i]) {
jt.setText(s+i);
for(int j=0;j<s.length();j++)
if(!((int)(s.charAt(j)-'0') >= 0 && (int)(s.charAt(j)-'0') <= 9)) {
flag=true;
y=0;
for(int k=j+1;k<s.length();k++)
y=y*10+(int)(s.charAt(k)-'0');
y=y*10+i;
}
if(!flag) {
x=0;
for(int j=0;j<s.length();j++)
x=x*10+(int)(s.charAt(j)-'0');
x=x*10+i;
}
}
}
}
class operButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String s=jt.getText();
if(e.getSource() == jboper[0]) {
op= '+' ;
jt.setText(s+'+');
}
else if(e.getSource() == jboper[1]) {
op = '-';
jt.setText(s+'-');
}
else if(e.getSource() == jboper[2]) {
op = '*';
jt.setText(s+'*');
}
else if(e.getSource() == jboper[3]) {
op = '/';
jt.setText(s+'/');
}
}
}
class backSpaceButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String s=jt.getText();
String curs=new String("");
for(int i=0;i<s.length()-1;i++) curs=curs+s.charAt(i);
jt.setText(curs);
char last=s.charAt(s.length()-1);
if(!((int)(last-'0') >= 0 || (int)(last-'0') <= 9)) {
op=' ';
}
for(int i=0;i<s.length();i++)
if(!((int)(s.charAt(i)) >= 0 || (int)(s.charAt(i)) <= 9)) {
y=0;
for(int j=i+1;j<s.length()-1;j++) {
y=y*10+(int)(s.charAt(j)-'0');
}
}
x=0;
for(int i=0;i<s.length()-1;i++)
x=x*10+(int)(s.charAt(i)-'0');
}
}
class equalButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
double ans=0;
if(op == '+') {
ans=x+y;
}
else if(op == '-') {
ans=x-y;
}
else if(op == '*') {
ans=x*y;
}
else if(op == '/') {
ans=(double)(x)/(double)(y);
}
jt.setText(String.valueOf(ans));
}
}
}