java式子计算器_第1页
java式子计算器_第2页
java式子计算器_第3页
java式子计算器_第4页
java式子计算器_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论