编写如下图的一个计算器图形界面,并可进行简单的加减乘除运算。
package 计算器;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator {
JFrame jframe;
JPanel jp1, jp2,jp3;
JTextField jtf;
JButton jbtn0, jbtn1, jbtn2, jbtn3, jbtn4, jbtn5, jbtn6, jbtn7, jbtn8,
jbtn9, jbtn10, jbtn11, jbtn12, jbtn13, jbtn14, jbtn15, jbtn16,jbtn17;
double output1=0 , output2=0;
boolean outflag1=false , outflag2=false , opflag=false;
private int op=0 , add=1 , sub=2 , mul=3 , div=4;
boolean firstpress = false;
/*outflag1,outflag2表示output1,output2是否有操作数。opflag表示op是否有运算符。*/
/**
* 创建计算器的整体界面
*/
public void go() {
jframe = new JFrame("Calculator");
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jtf = new JTextField(18);
jbtn17 = new JButton(" 清 除 ",new ImageIcon("2.png"));
jbtn0 = new JButton("0");
jbtn1 = new JButton("1");
jbtn2 = new JButton("2");
jbtn3 = new JButton("3");
jbtn4 = new JButton("4");
jbtn5 = new JButton("5");
jbtn6 = new JButton("6");
jbtn7 = new JButton("7");
jbtn8 = new JButton("8");
jbtn9 = new JButton("9");
jbtn10 = new JButton("10");
jbtn11 = new JButton("+");
jbtn12 = new JButton("-");
jbtn13 = new JButton("*");
jbtn14 = new JButton("/");
jbtn15 = new JButton("=");
jbtn16 = new JButton(".");
jtf.setText(jtf.getText()+"0");
jtf.setEditable(false);
jtf.setBackground(Color.WHITE);
jp1.add(jtf);
jp1.setSize(250, 50);
jp2.add(jbtn17);
jp3.setLayout(new GridLayout(4,4));
jp3.add(jbtn7);jp3.add(jbtn8);jp3.add(jbtn9);jp3.add(jbtn11);
jp3.add(jbtn4);jp3.add(jbtn5);jp3.add(jbtn6);jp3.add(jbtn12);
jp3.add(jbtn1);jp3.add(jbtn2);jp3.add(jbtn3);jp3.add(jbtn13);
jp3.add(jbtn0);jp3.add(jbtn16);jp3.add(jbtn15);jp3.add(jbtn14);
jframe.add(jp1,BorderLayout.NORTH);
jframe.add(jp3,BorderLayout.SOUTH);
jframe.add(jp2,BorderLayout.CENTER);
jframe.setSize(250, 220);
jframe.setLocation(550, 180);
jframe.setResizable(false);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setVisible(true);
}
/**
* 为计算器上面的按钮注册事件
*/
public void event(){
/*
* jbtn10是判断文本中不是一位0时,可以数的后面输0
*/
jbtn10.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
if(!(jtf.getText().length()==1 && jtf.getText().contains("0")))
jtf.setText(jtf.getText()+"0");
if(opflag==true && firstpress==false){
jtf.setText("0");
firstpress=true;
}
}
});
jbtn17.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent a) {
// TODO 自动生成的方法存根
jtf.setText("0");
}
});
jbtn0.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("0");
}
});
jbtn1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("1");
}
});
jbtn2.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("2");
}
});
jbtn3.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("3");
}
});
jbtn4.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("4");
}
});
jbtn5.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("5");
}
});
jbtn6.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("6");
}
});
jbtn7.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("7");
}
});
jbtn8.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("8");
}
});
jbtn9.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
addnum("9");
}
});
jbtn16.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
if(!jtf.getText().contains("."))
jtf.setText(jtf.getText()+".");
}
});
jbtn15.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
opbutton(0);
outflag1=false;
outflag2=false;
}
});
jbtn11.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
opbutton(1);
}
});
jbtn12.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
opbutton(2);
}
});
jbtn13.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
opbutton(3);
}
});
jbtn14.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
opbutton(4);
}
});
}
protected void opbutton(int i) {
// TODO 自动生成的方法存根
if(outflag1==false){
output1 = Double.parseDouble(jtf.getText());
outflag1 = true;
}
if(opflag==false){
op = i;
opflag = true;
firstpress = false;
}else{
output2 = Double.parseDouble(jtf.getText());
operate();
outflag1 = true;
op = i;
opflag = true;
outflag2 = false;
firstpress = false;
}
}
/**
* 为计算器上面每个按钮的事件添加方法
* @param x
*/
protected void addnum(String x) {
// TODO 自动生成的方法存根
if(jtf.getText().length()==1 && jtf.getText().contains("0"))
jtf.setText(x);
else
jtf.setText(jtf.getText()+x);
if(opflag==true && firstpress==false){
jtf.setText(x);
firstpress = true;
}
}
/**
*添加操作事件,0代表等于,1代表加,2代表减, 3代表乘,4代表除
*其中的运算结果为double型,要强制转换成字符型才能赋值给文本框
*/
private void operate(){
switch(op){
case 0:
output1 = output2 + 0;
break;
case 1:
output1 = output1 + output2;
jtf.setText(String.valueOf(output1));
break;
case 2:
output1 = output1 - output2;
jtf.setText(String.valueOf(output1));
break;
case 3:
output1 = output1 * output2;
jtf.setText(String.valueOf(output1));
break;
case 4:
if(output2!=0){
output1 = output1 / output2;
jtf.setText(String.valueOf(output1));
}else{
output1 = 0;
jtf.setText(String.valueOf(output1));
}
break;
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Calculator cal = new Calculator();
cal.go();
cal.event();
}
}