package package1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.text.NumberFormat;

public class Computer extends Frame implements ActionListener{

    NumberButton numberButton[];
    OperationButton operationButton[];
    Button 小数点按钮 , 正负号按钮 , 退格按钮 , 求倒数按钮 , 等号按钮 , 清零按钮 ;
    Panel panel;
    JTextField resultShow;
    String 运算符号[]={"+","-","*","/"};
    LinkedList linklist;
    boolean 是否按下等号=false;

    public Computer(){
        super("科学计算器");
        linklist=new LinkedList();
        numberButton=new NumberButton[10];
        for(int i=0;i<=9;i++){
            numberButton[i]=new NumberButton(i);
            numberButton[i].addActionListener(this);
        }

        operationButton=new OperationButton[4];
        for(int i=0;i<=3;i++){
            operationButton[i]=new OperationButton(运算符号[i]);
            operationButton[i].addActionListener(this);
        }

        退格按钮=new Button("back");
        清零按钮=new Button("C");
        等号按钮=new Button("=");
        小数点按钮=new Button(".");
        正负号按钮=new Button("+/-");
        求倒数按钮=new Button("1/x");

        退格按钮.setForeground(Color.red);
        清零按钮.setForeground(Color.red);
        等号按钮.setForeground(Color.red);
        小数点按钮.setForeground(Color.blue);
        正负号按钮.setForeground(Color.blue);
        求倒数按钮.setForeground(Color.blue);

        退格按钮.addActionListener(this);
        清零按钮.addActionListener(this);
        等号按钮.addActionListener(this);
        小数点按钮.addActionListener(this);
        正负号按钮.addActionListener(this);
        求倒数按钮.addActionListener(this);

        resultShow=new JTextField(10);
        resultShow.setHorizontalAlignment(JTextField.RIGHT);
        resultShow.setForeground(Color.blue);
        resultShow.setFont(new Font("TimeRoman",Font.PLAIN,14));
        resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
        resultShow.setBackground(Color.white);
        resultShow.setEditable(false);

        panel=new Panel();
        panel.setLayout(new GridLayout(4,5));
        panel.add(numberButton[1]);
        panel.add(numberButton[2]);
        panel.add(numberButton[3]);
        panel.add(operationButton[0]);
        panel.add(清零按钮);

        panel.add(numberButton[4]);
        panel.add(numberButton[5]);
        panel.add(numberButton[6]);
        panel.add(operationButton[1]);
        panel.add(退格按钮);

        panel.add(numberButton[7]);
        panel.add(numberButton[8]);
        panel.add(numberButton[9]);
        panel.add(operationButton[2]);
        panel.add(求倒数按钮);

        panel.add(numberButton[0]);
        panel.add(正负号按钮);
        panel.add(小数点按钮);
        panel.add(operationButton[3]);
        panel.add(等号按钮);

        add(panel,BorderLayout.CENTER);
        add(resultShow,BorderLayout.NORTH);
        setBounds(100,50,300,240);
        setVisible(true);

        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });
    }

        public void actionPerformed(ActionEvent e){
            if(e.getSource() instanceof NumberButton){
                NumberButton b=(NumberButton)e.getSource();
                if(linklist.size()==0){
                    int number=b.getNumber();
                    linklist.add(""+number);
                    resultShow.setText(""+number);
                    是否按下等号=false;
                }
                else if(linklist.size()==1 && 是否按下等号==false){
                    int number=b.getNumber();
                    String num=(String)linklist.getFirst();
                    String s=num.concat(""+number);
//                     E  set(int index, E element)        将此列表中指定位置的元素替换为指定的元素。
                    linklist.set(0,s);
                    resultShow.setText(s);
                }
                else if(linklist.size()==1 && 是否按下等号==true){
                    int number=b.getNumber();
                    linklist.removeFirst();
                    linklist.add(""+number);
                    是否按下等号=false;
                    resultShow.setText(""+number);
                }
                else if(linklist.size()==2){
                    int  number=b.getNumber();
                    linklist.add(""+number);
                    resultShow.setText(""+number);
                }
                else if(linklist.size()==3){
                    int  number=b.getNumber();
                    String num=(String)linklist.getLast();
                    String s=num.concat(""+number);
                    linklist.set(2,s);
                    resultShow.setText(s);
                }
            }

            else if(e.getSource() instanceof OperationButton){
                OperationButton b=(OperationButton)e.getSource();
                if(linklist.size()==1){
                    String mark=b.getOperator();
                    linklist.add(mark);
                }
                else if(linklist.size()==2){
                    String mark=b.getOperator();
                    linklist.set(1,mark);
                }
                else if(linklist.size()==3){
                    String mark=b.getOperator();
                    String num1=(String)linklist.getFirst();
                    String num2=(String)linklist.getLast();
                    String 运算符号=(String)linklist.get(1);

                    double n1=Double.parseDouble(num1);
                    double n2=Double.parseDouble(num2);
                    double n=0;
                    if(运算符号.equals("+"))n=n1+n2;
                    else if(运算符号.equals("-"))n=n1-n2;
                    else if(运算符号.equals("*"))n=n1*n2;
                    else if(运算符号.equals("/"))n=n1/n2;
                    linklist.clear();
                    linklist.add(""+n);
                    linklist.add(mark);
                    resultShow.setText(""+n);
                }
            }

            else if(e.getSource()==等号按钮){
                是否按下等号=true;
                if(linklist.size()==1 || linklist.size()==2){
                    String num=(String)linklist.getFirst();
                    resultShow.setText(""+num);
                }
                else if(linklist.size()==3){
                    String num1=(String)linklist.getFirst();
                    String num2=(String)linklist.getLast();
                    String 运算符号=(String)linklist.get(1);

                    double n1=Double.parseDouble(num1);
                    double n2=Double.parseDouble(num2);
                    double n=0;
                    if(运算符号.equals("+"))n=n1+n2;
                    else if(运算符号.equals("-"))n=n1-n2;
                    else if(运算符号.equals("*"))n=n1*n2;
                    else if(运算符号.equals("/"))n=n1/n2;
                    linklist.clear();
                    linklist.add(""+n);
                    resultShow.setText(""+n);
                }
            }

            else if(e.getSource()==小数点按钮){
//                if(linklist.size()==0){
//                    是否按下等号=false;
//                }
                if(linklist.size()==1){
                    String dot=小数点按钮.getLabel();
                    String num=(String) linklist.getFirst();
                    String s=null;
                    if(num.indexOf(dot)==-1){
                        s=num.concat(dot);
                        linklist.set(0,s);
                    }
                    else s=num;
                    linklist.set(0,s);
                    resultShow.setText(s);
                }
                else if(linklist.size()==3){
                    String dot=小数点按钮.getLabel();
                    String num=(String) linklist.getLast();
                    String s=null;
                    if(num.indexOf(dot)==-1){
                        s=num.concat(dot);
                        linklist.set(2,s);
                    }
                    else s=num;
                    linklist.set(2,s);
                    resultShow.setText(s);
                }
            }

            else if(e.getSource()==退格按钮){
                if(linklist.size()==1){
                    String num=(String) linklist.getFirst();
                    if(num.length()>=1){
                        num=num.substring(0,num.length()-1);
                        linklist.set(0,num);
                        resultShow.setText(num);
                    }
                    else{
                        linklist.removeLast();
                        resultShow.setText("0");
                    }
                }

                if(linklist.size()==3){
                    String num=(String) linklist.getLast();
                    if(num.length()>=1){
                        num=num.substring(0,num.length()-1);
                        linklist.set(2,num);
                        resultShow.setText(num);
                    }
                    else{
                        linklist.removeLast();
                        resultShow.setText("0");
                    }
                }
            }

            else if(e.getSource()==正负号按钮){
                if(linklist.size()==1){
                    String num=(String) linklist.getFirst();
                    double d=Double.parseDouble(num);
                    d=-1*d;
                    String str=String.valueOf(d);
                    linklist.set(0,str);
                    resultShow.setText(str);
                }
                else if(linklist.size()==3){
                    String num=(String) linklist.getLast();
                    double d=Double.parseDouble(num);
                    d=-1*d;
                    String str=String.valueOf(d);
                    linklist.set(2,str);
                    resultShow.setText(str);
                }
            }

            else if(e.getSource()==求倒数按钮){
                if(linklist.size()==1 || linklist.size()==2){
                    String num=(String) linklist.getFirst();
                    double d=Double.parseDouble(num);
                    d=1.0/d;
                    String str=String.valueOf(d);
                    linklist.set(0,str);
                    resultShow.setText(str);
                }
                else if(linklist.size()==3){
                    String num=(String) linklist.getLast();
                    double d=Double.parseDouble(num);
                    d=1.0/d;
                    String str=String.valueOf(d);
                    linklist.set(2,str);
                    resultShow.setText(str);
                }
            }

            else if(e.getSource()==清零按钮){
                是否按下等号=false;
                resultShow.setText("0");
                linklist.clear();
            }

        }

    public static void main(String[] args)
    {
        new Computer();
    }
}

class NumberButton extends Button{
    int number;
    public NumberButton(int number){
        super(""+number);
        this.number=number;
        setForeground(Color.blue);
    }
    public int getNumber(){
        return number;
    }
}

class OperationButton extends Button{
    String operator;
    public OperationButton(String operator){
        super(operator);
        this.operator=operator;
        setForeground(Color.red);
    }
    public String getOperator(){
        return operator;
    }
}

运行结果:

【java图形计算器】 java awt swing组件应用的更多相关文章

  1. java中经常使用的Swing组件总结

    1.按钮(Jbutton) Swing中的按钮是Jbutton,它是javax.swing.AbstracButton类的子类,swing中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且 ...

  2. Java GUI编程中AWT/swing/SWT的优缺点

    http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html AWT AWT是Abstract Window Toolkit(抽象窗口工具 ...

  3. java 图形界面

    1.创建一个窗口框架 /** * java 用户界面框架 * 2016/5/10 */ package org.windows; import javax.swing.*; public class ...

  4. AWT提供了Java Applet 和Java Application中可用的用户图形界面 GUI 中的基本组件

    AWT提供了Java Applet 和Java Application中可用的用户图形界面 GUI 中的基本组件( component s). 由于Java是一种独立于平台的 程序设计语言 ,但GUI ...

  5. JAVA 图形开发中组件对齐方法及界面开发

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 在上篇博客中提到了JAVA图形界面开发时的两种布局,流式布局和边框布局. 在实际使用中可能会发现,往 ...

  6. 【转】java图形界面设计(AWT)

    [转自]http://blog.sina.com.cn/s/blog_616e189f0100ne1t.html 1.       基本的java Frame操作. Java的图形界面的类主要包括AW ...

  7. JAVA Swing 组件演示***

    下面是Swing组件的演示: package a_swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt ...

  8. Java可视化计算器

    利用java中的AWT和SWING包来做可视化界面. 首先来简单了解一下这两个包: AWT和Swing都是Java中用来做可视化界面的.AWT(Abstract Window Toolkit):抽象窗 ...

  9. Java图形界面学习---------简易登录界面

    /** * @author Administrator * Java图形界面学习---------简易登录界面 * date:2015/10/31 */ import java.awt.BorderL ...

随机推荐

  1. input输入框只允许输入数字/ 数字+小数点/ 文字+字母/ 等解决方法

    1.只允许输入数字: <input type="text" onkeyup="this.value=this.value.replace(/[^0-9]/g,'') ...

  2. PHP中try{}catch{}的具体用法详解

    PHP中try{}catch{}是异常处理,将要执行的代码放入TRY块中,如果这些代码执行过程中某一条语句发生异常,则程序直接跳转到CATCH块中,由$e收集错误信息和显示.任何调用 可能抛出异常的方 ...

  3. Codeforces Round #256 (Div. 2) B Suffix Structures

    Description Bizon the Champion isn't just a bison. He also is a favorite of the "Bizons" t ...

  4. Tyvj-TOM的无穷序列

    背景 蛟川书院模拟试题 描述 TOM有一个无穷序列中如下:110100100010000100000.....请你帮助TOM找出在这个无穷序列中指定位置上的数字 输入格式 第一行一个正整数N,表示询问 ...

  5. ejabberd模块开发

    参考: http://anders.conbere.org/journal/ http://www.process-one.net/en/wiki/ejabberd_module_developmen ...

  6. Git 的 .gitignore 配置 转载

    .gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore 的一些心得. 1.配置语法: 以斜杠“/”开头 ...

  7. js 中创建对象

    对象是什么 从JavaScript定义上讲对象是无序属性的集合,其属性可以包含基本值.对象或函数.也就是说对象是一组没有特定顺序的属性,每个属性会映射到一个值上,是一组键值对,值可以是数据或对象. 最 ...

  8. 【Machine Learning in Action --4】朴素贝叶斯过滤网站的恶意留言

    背景:以在线社区的留言板为例,为了不影响社区的发展,我们需要屏蔽侮辱性的言论,所以要构建一个快速过滤器,如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当.过滤这类内容是一个很常见的 ...

  9. jquery1.8.3和1.11.3的用法区别

    学习js啦dom的对象 发现好复杂 不够简洁 所以我就用法强大的jquery来做功课 突然就遇到attr的方法对复选属性的checked取不了值 给我返回undefined 我查好久都没查出问题 结果 ...

  10. hadoop pig入门总结

    在这里贴一个pig源码的分析,做pig很长时间没做笔记,不包含任何细节,以后有机会再说吧 http://blackproof.iteye.com/blog/1769219 hadoop pig入门总结 ...