练手/计算器/GUI/AWT
来源:互联网 发布:网络监察大队图片 编辑:程序博客网 时间:2024/06/07 02:29
两百行左右,实现一个可以 按钮控制,键盘监听控制,可查看历史记录 的四则运算计算器。
/** * 实现运算符字符串的计算类 * @author Gray Xu */class Operator { //直接调用脚本引擎的方法 private String problem; static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); public Operator(String str){ this.problem = str; } public Object Operation(){ try{ return jse.eval(problem); }catch (Exception e) { return "输入不合法,请检查后再输入!!计算器都不会用,是不是傻。"; } }}/** * 计算器窗口 * @author Gray Xu * */public class Calculator { Frame f = new Frame("Simple Calulator!!^_^"); TextArea taMain = new TextArea(2,50); String[] names = {"1","2","3","+","4","5","6","-","7","8","9","*","0",".","=","/","(",")","Del","Clean"}; boolean CleanWindow = false; Dialog dHistory = new Dialog(f, "历史记录", true); TextArea taHistory = new TextArea(5,50); String strHistory = ""; //把监听器里的计算逻辑封装到函数里 public void doOperation(){ String text = taMain.getText(); String result; if(text.length()==0){ result="0"; }else{ result = String.valueOf(new Operator(text).Operation()); } taMain.setText(result); if(result.equals("输入不合法,请检查后再输入!!计算器都不会用,是不是傻。")){ CleanWindow = true; } strHistory = strHistory + text + "=" + result + "\n"; } public void init(){ //Panel设置为方格的布局 Panel p1 = new Panel(); p1.setLayout(new GridLayout(5,4,4,4)); //添加顶部的文本框 f.add(taMain,BorderLayout.NORTH); //输入性按钮监听器 ActionListener alInput = new ActionListener() { public void actionPerformed(ActionEvent e) { if(CleanWindow == true){ taMain.setText(""); } taMain.append(e.getActionCommand()); CleanWindow = false; } }; //功能性按钮监听器 ActionListener alFunc = new ActionListener() { public void actionPerformed(ActionEvent e) { String button = e.getActionCommand(); if(CleanWindow == true){ taMain.setText(""); } if(button.equals("Del")){ taMain.setText(taMain.getText().substring(0,taMain.getText().length()-1)); } if(button.equals("Clean")){ taMain.setText(""); } if(button.equals("=")){ doOperation(); } } }; //键盘监听器:强制合法输入,从而匹配字符串。 KeyListener klInput = new KeyListener() { String text = taMain.getText(); @Override public void keyTyped(KeyEvent e) {} @Override public void keyReleased(KeyEvent e) {} @Override public void keyPressed(KeyEvent e) { if(CleanWindow == true){ taMain.setText(""); } char keyChar = e.getKeyChar(); int keyCode = e.getKeyCode(); //输入性按键 for (int i = 0; i < 18; i++) { if(i==14){continue;} char[] temp = names[i].toCharArray(); char theKey = temp[0]; if(keyChar == theKey){ taMain.append(names[i]); } } //功能性按键 if(keyCode==KeyEvent.VK_EQUALS || keyCode==KeyEvent.VK_ENTER){ doOperation(); } if(keyCode==KeyEvent.VK_BACK_SPACE){ taMain.setText(text.substring(0,text.length()-1)); } } }; taMain.addKeyListener(klInput); //批量设置按钮,定义按钮功能 for (int i = 0; i < names.length; i++) { String name = names[i]; Button b = new Button(name); if(i>=18 || i==14){ b.addActionListener(alFunc); }else { b.addActionListener(alInput); } p1.add(b); } //窗口关闭功能实现(使用匿名内部类适配器重写) f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); dHistory.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { dHistory.setVisible(false); } }); //菜单按键监听器 ActionListener menuListener = new ActionListener() { public void actionPerformed(ActionEvent e) { //为模式对话框添加不可编辑文本框 dHistory.add(taHistory); taHistory.setEditable(false); taHistory.setText(strHistory); dHistory.pack(); dHistory.setVisible(true); } }; //查看历史记录功能 MenuBar mb = new MenuBar(); Menu function = new Menu("特殊服务"); MenuItem his = new MenuItem("查看历史计算记录"); his.addActionListener(menuListener); function.add(his); mb.add(function); //初始化界面 taMain.setEditable(false); f.addKeyListener(klInput); f.setResizable(false); f.setMenuBar(mb); f.add(p1); f.pack(); f.setVisible(true); } public static void main(String[] args) { new Calculator().init(); }}
0 0
- 练手/计算器/GUI/AWT
- Android练手项目----计算器
- AWT高仿计算器
- AWT的GUI编程
- 图形GUI之AWT
- Java -- AWT , GUI图形界面
- GUI之AWT
- Java GUI-AWT
- 一个计算器calculator的界面(初级)没有任何功能,只为熟悉GUI的awt的各种用法
- AWT 实现计算器 界面 设计
- java GUI AWT 布局管理器
- 【java基础】07.GUI:AWT
- Swing实现计算器GUI
- java简单计算器Gui
- java GUI计算器
- Java GUI计算器实现
- 练手小项目(二)计算器
- 利用AWT编写一个简易计算器
- MarkDown学习笔记
- CC2640之广播设备名上添加MAC地址
- 统计学习方法 第一章
- Ios 死锁 GCD 多线程
- 转发代理服务器与反向代理服务器
- 练手/计算器/GUI/AWT
- 121.iOS项目架构总结
- 1024.Palindromic Number (25)...to be continued...
- 随笔记-坐标
- Android开发 高斯模糊的实现
- caffe Resnet-50 finetune 所有代码+需要注意的地方
- PHP与Java面向对象不完全比较
- 【异常处理】java.lang.ClassNotFoundException: Didn't find class "android.os.PersistableBundle"
- C慕课打印图形