您的位置:首页 > 编程语言 > Java开发

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 计算器