package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* Windows操作系统自带的计算器是个很方便的小工具,
* 利用Java的GUI编程,
* 实现一个Java GUI计算器应用程序界面,
* 窗口标题为“计算器”,窗口布局如下图所示,在此计算器应用程序中实现“+、-、*、/”运算操作。
*
* @since 2010-9-20
* @start 1:02
* @end 2:27
*
*
* */
public class Three_Caculator {
public static void main(String[] args){
Caculator calc=new Caculator();
calc.init();
calc.start();
}
}
class Caculator extends JFrame implements ActionListener{
JButton num0=new JButton("0"),
num1=new JButton("1"),
num2=new JButton("2"),
num3=new JButton("3"),
num4=new JButton("4"),
num5=new JButton("5"),
num6=new JButton("6"),
num7=new JButton("7"),
num8=new JButton("8"),
num9=new JButton("9"),
plus=new JButton("+"),
minus=new JButton("-"),
times=new JButton("*"),
devid=new JButton("/"),
calc=new JButton("="),
clear=new JButton("Clear");
JTextArea text=new JTextArea();
JPanel panel1=new JPanel(),
panel2=new JPanel(),
panel4=new JPanel(),
panel3=new JPanel();
String str="";
double input=0;
double output=0;
double sum=0;
int mark=0;
public void init(){
this.getContentPane().setLayout(new GridLayout(5,1));
this.setBounds(100,100,300,400);
this.getContentPane().add(text);
GridLayout mgr=new GridLayout(1,4);
panel1.setLayout(mgr);
panel2.setLayout(mgr);
panel3.setLayout(mgr);
panel4.setLayout(mgr);
this.getContentPane().add(panel1);
this.getContentPane().add(panel2);
this.getContentPane().add(panel3);
this.getContentPane().add(panel4);
panel1.add(num7);
panel1.add(num8);
panel1.add(num9);
panel1.add(plus);
panel2.add(num4);
panel2.add(num5);
panel2.add(num6);
panel2.add(minus);
panel3.add(num1);
panel3.add(num2);
panel3.add(num3);
panel3.add(times);
panel4.add(num0);
panel4.add(clear);
panel4.add(calc);
panel4.add(devid);
num0.addActionListener(this);
num1.addActionListener(this);
num2.addActionListener(this);
num3.addActionListener(this);
num4.addActionListener(this);
num5.addActionListener(this);
num6.addActionListener(this);
num7.addActionListener(this);
num8.addActionListener(this);
num9.addActionListener(this);
plus.addActionListener(this);
minus.addActionListener(this);
times.addActionListener(this);
clear.addActionListener(this);
devid.addActionListener(this);
calc.addActionListener(this);
this.setVisible(true);
this.validate();
}
public void start(){
text.setEditable(false);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(num0)){
str+=0;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num1)){
str+=1;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num2)){
str+=2;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num3)){
str+=3;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num4)){
str+=4;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num5)){
str+=5;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num6)){
str+=6;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num7)){
str+="7";
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num8)){
str+=8;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num9)){
str+=9;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(num0)){
str+=0;
try{
input=Double.parseDouble(str);
}
catch(Exception exp){
text.setText("Input error!");
return;
}
}
if(e.getSource().equals(plus)){
this.calc();
mark=1;
}
if(e.getSource().equals(minus)){
this.calc();
mark=2;
}
if(e.getSource().equals(times)){
this.calc();
mark=3;
}
if(e.getSource().equals(devid)){
this.calc();
mark=4;
}
if(e.getSource().equals(clear)){
mark=0;
input=0;
str="";
output=0;
}
if(e.getSource().equals(calc)){
this.calc();
}
this.display();
}
public void calc(){
if(mark==0){
output=input;
}
if(mark==1){
output=output+input;
}
if(mark==2){
output=output-input;
}
if(mark==3){
output=output*input;
}
if(mark==4){
if(input!=0){
output=output/input;
}
}
input=0;
str="";
}
public void display(){
StringBuffer sb=new StringBuffer();
sb.append("Input:");
sb.append(input);
sb.append("/r/n");
sb.append("State:");
if(mark==1){
sb.append("+");
}
if(mark==2){
sb.append("-");
}
if(mark==3){
sb.append("*");
}
if(mark==4){
sb.append("/");
}
sb.append("/r/n");
sb.append(output);
sb.append("/r/n");
text.setText(sb.toString());
}
}