Java实战项目__简易计算器
2017-10-31 18:54
330 查看
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; //将从文本框中获取的数字重置为0 s1 = ""; 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(); //显示的操作符只能有一个,因此每次都重置为null textarea[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);//ac button[1] = new JButton("7"); button[2] = new JButton("8"); button[3] = new JButton("9"); button[1].setBounds(20, 300, 60, 60);//7 button[2].setBounds(100, 300, 60, 60);//8 button[3].setBounds(180, 300, 60, 60);//9 button[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 4000 [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]); } } }
运行结果:
相关文章推荐
- java注解详解(注解项目实战)
- Java项目实战经验—程序员成长的钥匙
- Java程序员如何做代码压力测试?【JWordPress前台项目实战】
- JAVA实战项目--文章发布系统
- 实战突击: Java Web项目整合开发(PDF)
- 2017.7.7 慕课网-Java从零打造企业级电商项目实战:for3 category模块接口设计
- 【Java项目实战】——DRP之Oracle_11g数据库安装
- 【Java项目实战】微信公众平台java开发详解(工程代码+解析)
- java基础项目实战教程视频下载,ja…
- s1(java)项目实战(固定资产管理)(quary_AssetFullDialog )
- s1(java)项目实战(固定资产管理)(set_ employeeAdd )
- 【java】itoo项目实战之常见问题三
- 【java】itoo项目实战之java Web 中web的作用
- Java 项目优化实战
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第十二节)
- Java Web 项目SSO实战二之(win7 and Windows server 2008)
- 【java】itoo项目实战之SpringMVC+EasyUI_HelloWorld
- JavaWeb 入门级项目实战 -- 文章发布系统 (第四节)
- 2017.7.14 慕课网-Java从零打造企业级电商项目实战:for4 product模块接口设计
- 项目实战—— 类型java.lang.charsequence不能解决(完美解决!)