




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基本思想:建立窗口时,我后面才想到把所有的组件先放到Container容器中。我先把计算器分解成,菜单栏,输入区,按钮区,显示区分别用4个函数实现相应的操作,最后在计算器构造函数调用绑定到窗口。我创建了计算符操作按钮、非计算操作按钮、菜单监听器,三个监听器来实现菜单和按钮监听。对于各组件我采用GridBagLayout可变布局,再GridBagConstraints对布局组件布局设置。JTextField输入区,JTextArea显示区全局定义为了方便按钮的输入和式子的输出。创建一个按钮函数,有利于添加的按钮布局设置以及根据不同类型的按钮添加不同的监听器。因为计算器有整数和小数计算的区别,我创建一个数值类根据不同的值,计算后返回不同的类型,在类内部实现数值的计算操作。最后单独几个函数来实现式子计算。该计算器中我还有光标设定,结果存储的实现等等。import java.awt.Container;import java.awt.Font;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JButton;import javax.swing.JTextField;public class Caculator extends JFrameprivate GridBagLayout layout=new GridBagLayout();/可变布局private Container container=new Container();/容器,用于储存组件,最后一起添加到窗口private GridBagConstraints constraints=new GridBagConstraints();/布局设置JTextArea textArea=new JTextArea();/式子显示区JTextField textField=new JTextField();/输入区int fpoint=0;/textField 光标定位int apoint=0;/textArea 光标定位int upoint=0;/memory使用向上的位置Numer result=new Numer();/结果暂存Numer M;/结果存储器String formula=“;/式子String copty=“;/复制的式子Memory memorys=new Memory100;/存储历史最大记录int number=0;/存储计数器boolean upfirst=true;/判断是否首次使用向上public Caculator()super(“计算器“);container.setLayout(layout);addMenu();addTextArea();addTextField();addButton();add(container);/添加菜单private void addMenu()JMenu menus=new JMenu3;/主菜单menus0=new JMenu(“查看(V)“);menus0.setMnemonic(V);menus1=new JMenu(“编辑(E)“);menus1.setMnemonic(E);menus2=new JMenu(“帮助(H)“);menus2.setMnemonic(H);JMenuItem lookItem=new JMenuItem2;/子菜单JMenuItem aditItem=new JMenuItem3;JMenuItem helpItem=new JMenuItem2;lookItem0=new JMenuItem(“普通型(O)“);lookItem0.setMnemonic(O);/快捷键lookItem1=new JMenuItem(“标准型(T)“);lookItem1.setMnemonic(T);aditItem0=new JMenuItem(“复制(C) Ctrl+C“);aditItem0.setMnemonic(java.awt.event.KeyEvent.VK_C);aditItem1=new JMenuItem(“粘贴(P) Ctrl+V“);aditItem1.setMnemonic(java.awt.event.KeyEvent.VK_V);aditItem2=new JMenuItem(“自由编辑(F)“);aditItem2.setMnemonic(F);helpItem0=new JMenuItem(“关于主题(H)“);helpItem0.setMnemonic(H);helpItem1=new JMenuItem(“关于计算器(A)“);MenuAction menuaction=new MenuAction();lookItem0.addActionListener(menuaction);/菜单监听器lookItem1.addActionListener(menuaction);aditItem0.addActionListener(menuaction);aditItem1.addActionListener(menuaction);aditItem2.addActionListener(menuaction);helpItem0.addActionListener(menuaction);helpItem1.addActionListener(menuaction);JMenuBar bar=new JMenuBar();/菜单容器吧menus0.add(lookItem0);menus0.add(lookItem1);menus1.add(aditItem0);menus1.add(aditItem1);menus1.add(aditItem2);menus2.add(helpItem0);menus2.add(helpItem1);setJMenuBar(bar);/把菜单绑到窗口上的方法bar.add(menus0);bar.add(menus1);bar.add(menus2);/添加显示区private void addTextArea()constraints.gridx=0;/组件x 位置constraints.gridy=0;/组件y 位置constraints.gridheight=1;/组件高度constraints.gridwidth=10;/组件宽度constraints.fill=GridBagConstraints.BOTH;/组件随显示变化的选项constraints.weightx=1;/水平扩展,即显示变化时,长度变化constraints.weighty=1;/垂直扩展,即高度变化textArea.setEditable(false);/不可编辑JScrollPane spane=new JScrollPane(textArea);/滚动条添加textArea.setFont(new Font(“Serif“,Font.PLAIN,18);/显示字体layout.setConstraints(spane, constraints);/把布局设置应用到组件上spane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);/需要时才出现滚动条container.add(spane);/把该组件添加到容器中/添加输入区private void addTextField()constraints.gridx=0;/组件x 位置constraints.gridy=1;/组件y 位置constraints.gridheight=1;/组件高度constraints.gridwidth=5;/组件宽度constraints.fill=GridBagConstraints.BOTH;constraints.weightx=1;constraints.weighty=1;textField.setHorizontalAlignment(JTextField.RIGHT);/光标右边显示textField.setEditable(false);/拒绝编辑textField.setFont(new Font(“Serif“,Font.PLAIN,18);/textField.setText(“);layout.setConstraints(textField, constraints);container.add(textField);/添加按钮/添加按钮private void addButton()InsertAction insert=new InsertAction();CommandAction command=new CommandAction();addbutton(“MC“,0,2,1,1,command);addbutton(“MR“,1,2,1,1,command);addbutton(“MS“,2,2,1,1,command);addbutton(“M+“,3,2,1,1,command);addbutton(“M-“,4,2,1,1,command);addbutton(“Delete“,0,3,1,1,insert);addbutton(“CE“,1,3,1,1,insert);addbutton(“C“,2,3,1,1,insert);addbutton(“,3,3,1,1,insert);addbutton(“,4,3,1,1,command);addbutton(“7“,0,4,1,1,insert);addbutton(“8“,1,4,1,1,insert);addbutton(“9“,2,4,1,1,insert);addbutton(“,3,4,1,1,command);addbutton(“%“,4,4,1,1,command);addbutton(“4“,0,5,1,1,insert);addbutton(“5“,1,5,1,1,insert);addbutton(“6“,2,5,1,1,insert);addbutton(“,3,5,1,1,command);addbutton(“1/x“,4,5,1,1,command);addbutton(“1“,0,6,1,1,insert);addbutton(“2“,1,6,1,1,insert);addbutton(“3“,2,6,1,1,insert);addbutton(“ ,3,6,1,1,command);addbutton(“,4,6,1,1,command);addbutton(“0“,0,7,1,1,insert);addbutton(“.“,1,7,1,1,insert);addbutton(“(“,2,7,1,1,command);addbutton(“)“,3,7,1,1,command);addbutton(“=“,4,7,2,1,command);addbutton(“,0,8,1,1,command);addbutton(“,1,8,1,1,command);addbutton(“,2,8,1,1,command);addbutton(“,3,8,1,1,command);/单个按钮设置private void addbutton(String label,int x,int y,int height,int width,ActionListener listener)JButton button=new JButton(label);constraints.gridx=x;constraints.gridy=y;constraints.gridheight=height;constraints.gridwidth=width;constraints.fill=GridBagConstraints.BOTH;button.addActionListener(listener);layout.setConstraints(button,constraints);container.add(button);/container./设置数值按钮监听器/非计算符监听器。主要是只在TextField操作的按钮private class InsertAction implements ActionListenerpublic void actionPerformed(ActionEvent event)String input=event.getActionCommand();/获取输入的按钮String output=textField.getText();/获取输入区内容if(!input.equals(“)/输入其他按钮时,去掉上下翻的功能if(input.equals(“Delete“)if(fpoint0)/输入区的删除textField.setText(output.substring(0,fpoint-1)+output.substring(fpoint,output.length();if(fpoint0)fpoint-;/光标位置减一else if(apoint0)/显示区的删除if(apoint=formula.length()/尾部删除formula=formula.substring(0,apoint-1);textArea.setText(formula);elseformula=formula.substring(0,apoint-1)+formula.substring(apoint,formula.length();textArea.setText(formula.substring(0,apoint-1)+“+formula.substring(apoint-1,formula.length();/中间删除时需要恢复显示的光标if(apoint0)apoint-;return;if(input.equals(“.“)if(output.indexOf(“.“)=-1)/防止重复输入“.“if(apoint0)/在输入区中间插入textField.setText(output.substring(0, fpoint)+input+output.substring(fpoint,output.length() );fpoint+;output=textField.getText();else if(fpoint=output.length()/输入区尾部插入if(output.length()=0)textField.setText(“0.“);fpoint=2;/空输入时加“.“else textField.setText(output+“.“);fpoint+;return;/键入数字if(!input.equals(“)textField.setText(output.substring(0,fpoint)+“ +output.substring(fpoint,output.length();else if(!aput.isEmpty()/显示区向左if(apoint0)apoint-;textArea.setText(aput.substring(0, apoint)+“+aput.substring(apoint, aput.length();return;if(input.equals(“)if(!output.isEmpty()if(fpoint=99)upoint=0;else upoint+;elsetextArea.setText(memorysupoint.print();textField.setText(“);apoint=0;return;if(input.equals(“)if(upfirst)if(memorysnumber=null)upoint=0;else upoint=number+1;textArea.setText(“+upoint);upfirst=false;if(upoint=99)upoint=0;else upoint+;if(number=0textArea.setText(formula);if(upoint=0)upoint=99;else upoint-;elsetextArea.setText(memorysupoint.print();textField.setText(“);apoint=0;return;/求倒数if(input.equals(“1/x“)if(Double.parseDouble(output)!=0fpoint=textField.getText().length();else if(Double.parseDouble(output)=0)JOptionPane.showMessageDialog(Caculator.this,String.format(“%s“, “错误!分母不能为0!“);else JOptionPane.showMessageDialog(Caculator.this,String.format(“%s“, “错误!当前情况不能求倒数!“);return;if(input.equals(“=“)formula=textArea.getText();/获取最后的显示if(!output.isEmpty()/如果输入不为空时要添加输入后再“=“formula+=output;textField.setText(“);fpoint=0;apoint=formula.length();formula=re_formula(formula);/得到符合计算的最后式子result.rnumber(caculete(f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖北襄阳市枣阳市招聘事业单位人员206人考前自测高频考点模拟试题及答案详解(易错题)
- 2025年伊春市住房和城乡建设局面向社会公开招聘临时工作人员2人考前自测高频考点模拟试题附答案详解
- 2025年楚雄技师学院云南现代职业技术学院高层次人才和急需紧缺招聘考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025年春季中国商飞公司校园招聘和年度社会招聘考前自测高频考点模拟试题及完整答案详解一套
- 2025年滁州南谯城市投资控股集团有限公司招聘10人考前自测高频考点模拟试题附答案详解(典型题)
- 2025年函授土木考试试题及答案
- 2025江西赣州市第五人民医院劳务派遣招聘精神科助理医师1名模拟试卷带答案详解
- 2025年数学中级考试试题及答案
- 2025高中教师数学招聘试题及答案
- 2025医院手术室试题及答案
- 水生产处理工三级安全教育(班组级)考核试卷及答案
- 2025至2030中国魔芋行业项目调研及市场前景预测评估报告
- 2024新译林版英语八年级上Unit 3 To be a good learner单词表(开学版)
- DGTJ08-2310-2019 外墙外保温系统修复技术标准
- 软件开发分包管理措施
- 冬季四防培训课件
- 建筑公司研发管理制度
- Python编程基础(第3版)(微课版)-教学大纲
- 小学体育六年级上册教案(全册)
- TB-T 3356-2021铁路隧道锚杆-PDF解密
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
评论
0/150
提交评论