Java实战项目__简易计算器

来源:互联网 发布:数据分析所用的方法 编辑:程序博客网 时间:2024/06/05 21:13

java小项目 ------计算器


GUI初步编程:
主要是显示一个窗口,
堆积一些基本组件
处理基本事件

主类代码:


package Display_Interface;import java.awt.Color;public class Main_interface {public static void main(String [] args){//为了更好的体现封装的特点,文本框和按钮的监视器应该分别封装//菜单栏,待完善Windows win = new Windows();win.setBounds(300, 20, 360, 680);win.getContentPane().setBackground(Color.LIGHT_GRAY);//如果对象直接调用setBackground()更改的是框架的颜色}}


界面类:


package Display_Interface;//其他功能,菜单中单位转化,一个显示即是时间的面板import java.awt.event.*;import javax.swing.*;import java.util.StringTokenizer;@SuppressWarnings("serial")public class Windows extends JFrame{//用于计算和数据处理String s1 = "",s2 = "";//暂时存放从文本框获取的字符串,用于转换成数字int tmp = 0;//控制文本框追加选择,默认为0,获得字符后重置为1,追加到第三个文本框double finalAnswer = 0.0;//最终答案,用于输出到textarea[0]String symbol="";    //获得的运算符的字符串char operator[];                   //控制获得的运算符 Double getNum[];//从输入的字符串中逐一提取数字//组件JLabel label[] = new JLabel[2];     //标签JMenuBar menubar;                   //菜单条JMenu menu[] = new JMenu[5];        //创建长度为5菜单数组JButton button[] = new JButton[17]; //创建动作按钮动作JTextArea  textarea[] = new JTextArea[4];   //文本区域//构造方法,初始化窗口public Windows(){setLayout(null);                         //自定义布局set_TextArea();   //文本区域set_Button();                           //按钮布局set_Label();                           //标签布局 set_Menu();                         //菜单选项init_Listener();   //注册监视器setTitle("Calculator");              //设置标题setVisible(true);                   //设置可见setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口操作}// 为按钮,键盘,等号键注册相应监视器void init_Listener() {//为数字按钮注册监视器System.out.println(finalAnswer);for (int i = 1; i <= 10; i++)button[i].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {getNum = new Double[2];if(tmp == 0){textarea[0].append(e.getActionCommand());s1 +=  e.getActionCommand();}if(tmp == 1) {textarea[2].append(e.getActionCommand());s2 +=  e.getActionCommand();}}});//创建两个文本框,在两个文本框中间键入一个新的文本框 ,用于获得运算符,//处理时,先将两个数字文本框获取的数字存入浮点型的数组中,然后将字符文本框中获得的字符存入字符//operator中,使用switch语句,将四种情况分别处理//缺点:不能进行多位数的操作,以及多位数数字的复合运算//其他功能,单位转换,求一元二次函数的结果//另外//添加一个新的面板,用于显示当前的时间,实时刷新,调用多线程.// 为等号创建单独的监视器button[16].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//获得存放运算符号的字符数组operator = symbol.toCharArray();//获得数字getNum[0] = Double.valueOf(s1);getNum[1] = Double.valueOf(s2);System.out.println("getNum[0] = "+getNum[0]+"\ngetNum[1] = "+getNum[1]);//debug过程,在case语句中忘记加break语句switch(operator[0]){case '+':{finalAnswer = getNum[0]+getNum[1];break;}case '-':{finalAnswer = getNum[0]-getNum[1];break;}case '×':{finalAnswer = getNum[0]*getNum[1];break;}case '÷':{finalAnswer = getNum[0]/getNum[1];break;}}System.out.println("finalAnswer = "+finalAnswer);textarea[3].append(String.valueOf(finalAnswer));}});// 为AC创建监视器button[0].addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {//清空文本框textarea[0].setText(null);textarea[1].setText(null);textarea[2].setText(null);textarea[3].setText(null);//运算符重置symbol = "";//将tmp置于0,再次追加字符时,置于textarea[0]tmp = 0;//将从文本框中获取的数字重置为0s1 = "";s2 = "";System.out.println("重置后getNum[0] = "+getNum[0]+"\ngetNum[1] = "+getNum[1]);}});// 为运算符创建监视器//特殊处理,若两次点击加号或者两个数字重置问题for (int i=11; i<=14; i++) {button[i].addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {//symbol字符串中只保存最后一次点击的运算符//因此每次处理事件时,都将symbol字符串重置为空symbol = "";symbol  = e.getActionCommand();//显示的操作符只能有一个,因此每次都重置为nulltextarea[1].setText(null);textarea[1].append(e.getActionCommand());//将运算符存入字符数组中operator = symbol.toCharArray();tmp = 1;}});}}//内部类,从键盘获取字符class Key_listener implements KeyListener,FocusListener{public void keyPressed(KeyEvent e) {textarea[0]=(JTextArea)e.getSource();}public void keyTyped(KeyEvent e) {}public void keyReleased(KeyEvent e) {}public void focusGained(FocusEvent e) {textarea[0]=(JTextArea)e.getSource();}public void focusLost(FocusEvent e){}}//设置文本框,用于显示结果和过程void set_TextArea(){//文本区初始化,并将文本加入到面板textarea[0] = new JTextArea(9,10);textarea[1] = new JTextArea(9,10);textarea[2] = new JTextArea(9,10);textarea[3] = new JTextArea(9,10);add(textarea[0]);add(textarea[1]);add(textarea[2]);add(textarea[3]);//文本区设置位置textarea[0].setBounds(20, 60, 70, 30);//第一个操作数textarea[1].setBounds(120, 60, 40, 30);//运算符textarea[2].setBounds(190, 60, 70, 30);//第二个操作数textarea[3].setBounds(20, 140, 300, 30);//显示运算结果}//嵌入菜单栏,菜单项void set_Menu(){menubar = new JMenuBar();add(menubar);menu[0] = new JMenu("菜单一");menu[1] = new JMenu("菜单二");menu[2] = new JMenu("菜单三");menu[3] = new JMenu("菜单四");menu[4] = new JMenu("菜单五");for(int i = 0; i < 5; i++)menubar.add(menu[i]);setJMenuBar(menubar);//将菜单添加到面板}//设置标签,安排布局void set_Label(){//标签初始化label[0] = new JLabel("运算过程:");label[1] = new JLabel("运算结果:");//将标签添加到底层容器for(int i = 0; i < 2; i++){add(label[i]);}//标签的布局label[0].setBounds(20, 20, 65, 30);label[1].setBounds(20, 100, 65, 30);}//添加按钮,安排布局void set_Button(){button[0] = new JButton("AC");button[0].setBounds(20, 220, 140, 60);//acbutton[1] = new JButton("7");button[2] = new JButton("8");button[3] = new JButton("9");button[1].setBounds(20, 300, 60, 60);//7button[2].setBounds(100, 300, 60, 60);//8button[3].setBounds(180, 300, 60, 60);//9button[4] = new JButton("4");button[5] = new JButton("5");button[6] = new JButton("6");button[4].setBounds(20, 380, 60, 60);button[5].setBounds(100, 380, 60, 60);button[6].setBounds(180, 380, 60, 60);button[7] = new JButton("1");button[8] = new JButton("2");button[9] = new JButton("3");button[7].setBounds(20, 460, 60, 60);button[8].setBounds(100, 460, 60, 60);button[9].setBounds(180, 460, 60, 60);button[10] = new JButton("0");button[10].setBounds(20, 540, 140, 60);button[11] = new JButton("+");button[12] = new JButton("-");button[13] = new JButton("×");button[14] = new JButton("÷");button[11].setBounds(260, 220, 60, 60);button[12].setBounds(260, 300, 60, 60);button[13].setBounds(260, 380, 60, 60);button[14].setBounds(260, 460, 60, 60);button[15] = new JButton(".");button[16] = new JButton("=");button[15].setBounds(180, 540, 60, 60);button[16].setBounds(260, 540, 60, 60);//将按钮加入到容器for (int i = 0; i < 17; i++){add(button[i]);}}}


运行结果: