链接: link.
这是大概的窗口,也可以自己修改一下样式
这里是我的代码.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
//ActionListener,处理按钮事件,点击按钮的时候会把文本显示在文本框中
public class Main implements ActionListener {
//显示的文本框
JTextField tf;
//按钮
JButton bt;
//用数组的方法定义按钮上面的文本
String btText[] = { "7","8","9","/",
"4","5","6","*",
"1","2","3","-",
"0",".","=","+",};
public static void main(String args[]) {
//程序进行的入口
Main app =new Main();
app.go();
}
//所有功能都在go里面
void go() {
//先创建窗口
JFrame frame=new JFrame("Jisuanqi");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//在显示之前创建出来
tf=new JTextField();
//设置文本框样式
tf.setPreferredSize(new Dimension(300,50));
bt=new JButton();
//把文本框和按钮添加到窗体当中去
//文本框添加到北边
frame.getContentPane().add(tf,BorderLayout.NORTH);
frame.getContentPane().add(bt,BorderLayout.CENTER);
//面容面板
JPanel p=new JPanel();
//设置网格布局
p.setLayout( new GridLayout(4,4));
//添加16个按钮
for(int i=0;i<16;i++) {
JButton bt=new JButton(btText[i]);
p.add(bt);
//添加事件处理
bt.addActionListener(this);
}
//把p添加到窗体当中去,并且会覆盖掉上边的bt——>frame.getContentPane().add(bt,BorderLayout.CENTER);
frame.getContentPane().add(p,BorderLayout.CENTER);
//窗口尺寸
frame.setSize(300, 400);
frame.setVisible(true);
}
//处理按钮事件,点击按钮的时候会把文本显示在文本框中
//第一个运算数字
String strA="";
//第二个运算数字
String strB="";
//运算符,初始化给一个任意字符
char opreator='@';
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//把点击得到的字符进行处理
String action=e.getActionCommand();
if(action .charAt(0)>='0'&&action .charAt(0)<='9') {
//表明运算符等于初始值,还没有点击运算符。说明该字符是第个数据
if(opreator=='@') {
if(action .charAt(0)=='0') {
if(strA.length()>0) {
//对第一个数字处理字符相加按一次9和一次8得到的是98而不是17
strA+=action;
//把点击得到的数字添加到文本框中去
tf.setText(strA);
}
}else {
strA+=action;
tf.setText(strA);
}
}else
//否则是第二个数据
{
if(action .charAt(0)=='0') {
if(strB.length()>0) {
//对第一个数字处理字符相加按一次9和一次8得到的是98而不是17
strB+=action;
//把点击得到的数字添加到文本框中去
tf.setText(strB);
}
}else {
strB+=action;
tf.setText(strB);
}
}
}else if(action.charAt(0)=='+'||action.charAt(0)=='-'||action.charAt(0)=='*'||action.charAt(0)=='/') {
//判断是否是加减乘除
opreator= action.charAt(0);
}else if(action.charAt(0)=='=') {
if(opreator=='+') {
int c=Integer.parseInt(strA)+Integer.parseInt(strB);
/*
* 把结果c添加到文本框,因为c是int类型的所以要加一个空字符串转化成字符串类型
tf.setText(c+"");
* */
//把结果添加到文本框
tf.setText(String.valueOf(c));
}else if(opreator=='-') {
int c=Integer.parseInt(strA)-Integer.parseInt(strB);
tf.setText(String.valueOf(c));
}else if(opreator=='*') {
int c=Integer.parseInt(strA)*Integer.parseInt(strB);
tf.setText(String.valueOf(c));
}else if(opreator=='/') {
int c=Integer.parseInt(strA)/Integer.parseInt(strB);
tf.setText(String.valueOf(c));
}
//第一次计算完成后进行数据初始化以进行下一次的运算
opreator='@';
strA="";
strB="";
}
}
}