java语言的简单计算器
2017-01-02 16:28
162 查看
大二突然兴起学了一段时间java。基础差,且没能坚持不懈,只学到了一写入门知识(其实还并没有入门,框架这些基础的都没学)。经过一个多月的边玩边学,终于学到了GUI界面的编写。想起之前课设需要做一个计算器(那时候找大神同学要代码,并不会写),于是想自己写一个计算器出来。也算是java学习写出的第一个看上去比较像东西的东西。 其实相隔现在已经快一年了,看了很多博文,感觉自己写代码就像玩一样,就想学各位大牛一样,开始写博文记录一下自己编程的历程,ps:这是我的第一篇博文。
———-正文———-
毕竟是第一个作品,必然很low(也许大一的看了都要鄙视我了,也许高中生就会了,知乎看到过高中生会的东西我现在都一脸懵逼),只能实现+、-、*、/以及取余5个功能。且一次只能进行一个符号运算。不多说,先上个界面看看实现的功能吧。
开始代码说明吧
//导入必要的包文件 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.Panel; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class FrameDemo { //几个GUI界面要用的对象创建 JFrame frame=new JFrame("easyCaculator");//计算器的标题 JPanel jPanel=new JPanel();//容器 JLabel display=new JLabel("0.0");//初始值显示 Panel panel=new Panel(); StringBuilder j=new StringBuilder();//创建一个StringBuilder 对象来存储内容 Container container=new Container();//创建对象,放在方法外,可以被所有方法调用。 public void visibleWindow(){ //屏幕大小监测 Toolkit toolkit=Toolkit.getDefaultToolkit(); Dimension screenSize=toolkit.getScreenSize(); int screenHeight=screenSize.height; int screenWidth=screenSize.width; //显示窗口 frame.setSize(300, 200); frame.setVisible(true); frame.setLocation(screenWidth/4,screenHeight/4); //添加窗口关闭事件 frame.addWindowListener(new WindowAdapter(){ public void windowclosing(WindowEvent e) { System.out.println("窗口关闭"); System.exit(0); } }); jPanel.setLayout(new FlowLayout());//设置流式布局 jPanel.setFont(new Font("Helvetica", Font.PLAIN, 14));//设置字体 frame.add(display,BorderLayout.NORTH);//添加边界布局 container.add(jPanel); frame.add(jPanel); //添加按钮 jPanel.setLayout(new GridLayout(0, 4));//布局,每列四个,0表示行没有限制 delete("刪除"); restoration("复位"); myButton("+"); myButton("-"); myButton("1"); myButton("2"); myButton("3"); myButton("*"); myButton("4"); myButton("5"); myButton("6"); myButton("/"); myButton("7"); myButton("8"); myButton("9"); myButton("%"); quite("退出"); myButton("0"); myButton("."); equal("="); } //定义Mybutton方法,也就是把按钮中的内容添加到j中 public void myButton(final String i){ try { JButton button=new JButton(i); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //append(),toString()方法 display.setText(j.append(i).toString());//显示出来 } });; jPanel.add(button); frame.add(jPanel); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //复位功能,清空j中的内容 public void restoration(String i) { try { JButton button=new JButton(i); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { j=new StringBuilder(); display.setText("0.0"); } }); jPanel.add(button); frame.add(jPanel); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //删除功能 public void delete(String i) { try { JButton button=new JButton (i); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(j!=null&&j.length()!=0){//new出来的j的值为null,清空后的j的长度为0。特殊情况 j.deleteCharAt(j.length()-1);//从0开始,所以要-1 if(j.length()==0)//为0的时候 display.setText("0.0"); else display.setText(j.toString()); } else display.setText("0.0"); } }); jPanel.add(button); frame.add(jPanel); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //退出功能 public void quite(String i) { try { JButton button=new JButton(i); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0);//结束程序 } }); jPanel.add(button); frame.add(jPanel); } catch (Exception e) { } } //等号功能,核心功能 public void equal(String i) { try { JButton button=new JButton(i); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(j.toString().matches("[-]?\\d+[\\.\\d]?\\d*[+*%/-]\\d+[\\.\\d]?\\d*")){//正则表达式 int temp;//定义一个变量,方便记录i的值 for(int i=1;i<j.toString().length();i++){ //逐个字符比较,知道找到运算符为止,然后将符号两边的字符认为是需要进行运算的数字, //进行运算,下同 if(j.toString().charAt(i)=='+'){ temp=i; double a=Double.parseDouble(j.toString().substring(0, i)); double b=Double.parseDouble(j.toString().substring(i+1, j.length())); j=new StringBuilder(); j.append(a+b);//运算并把值赋给j,显示出来 display.setText(j.toString()); } else if(j.toString().charAt(i)=='-'){ temp=i; double a=Double.parseDouble(j.toString().substring(0, i)); double b=Double.parseDouble(j.toString().substring(i+1, j.length())); j=new StringBuilder(); j.append(a-b); display.setText(j.toString()); } else if(j.toString().charAt(i)=='*'){ temp=i; double a=Double.parseDouble(j.toString().substring(0, i)); double b=Double.parseDouble(j.toString().substring(i+1, j.length())); j=new StringBuilder(); j.append(a*b); display.setText(j.toString()); } else if(j.toString().charAt(i)=='/'){ temp=i; double a=Double.parseDouble(j.toString().substring(0, i)); double b=Double.parseDouble(j.toString().substring(i+1, j.length())); if(b==0)//除数为0的情况 display.setText("error"); else{ j=new StringBuilder(); j.append(a/b); display.setText(j.toString()); } } else if(j.toString().charAt(i)=='%'){ temp=i; double a=Double.parseDouble(j.toString().substring(0, i)); double b=Double.parseDouble(j.toString().substring(i+1, j.length())); j=new StringBuilder(); j.append(a%b); display.setText(j.toString()); } } } else ; } }); jPanel.add(button); frame.add(jPanel); } catch (Exception e) { e.printStackTrace(); } } }
//main函数 public class Caculator { public static void main(String[] args) { FrameDemo s1=new FrameDemo(); s1.visibleWindow(); } }
ps:代码实现功能有限,已经把我遇到的bug都解决了,但不敢说一定没有bug,且代码的质量高不高我也不知道。
以上是实现功能的代码。建工程,然后new两个class文件分别把两段代码放在里面就好了。本次运行代码是在myeclipse2015上运行的。但是其实最开始这些代码是大概一年前在eclipse上写的,而且jdk版本也发生了变化,从eclipse到myeclipse确实有一些兼容上的问题,不过都解决了,也不难,自行百度就好了。
相关文章推荐
- Java语言的接口与类型安全
- 使用java语言实现http隧道技术
- C#实践—简单计算器设计
- 插入法(Java语言)
- java 简单计算器
- flex 制作的简单计算器
- 简单计算器的启示
- 使用java语言用docx4j包操作office2007的ooxml文档示例
- Android开发简单计算器
- 一个简单计算器的c程序
- js的表单操作 简单计算器
- php扩展开发-简单计算器的四则运算
- JAVA语言如何进行异常处理?
- hdu1237 简单计算器
- 对于简单计算器的技术实现
- hdu - 1237 - 简单计算器
- 《程序员的第一年》---复习一下C#的【封装 多态 继承 -----简单计算器源码实例】
- MFC使用双栈实现简单计算器
- Unity3D之NGUI简单计算器新手入门
- Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)