用java编写一个计算器

来源:互联网 发布:linux同名文件夹 编辑:程序博客网 时间:2024/06/05 19:47

    今天学了GUI,自己写了一个计算器。基本功能都实现了。不过还有很多缺陷,我用的方法也不好,全部代码都写在了同一个方法中了。还写的很啰嗦。发个博客纪念一下今天下午的成果。和大家分享一下成果,代码后面还会继续改进。

代码如下:

package com.jisuanqi;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


/**
 * 计算器
 */
public class JSQ extends JFrame {


public static void main(String[] args) {
new JSQ();

}


public JSQ() {
setTitle("计算器"); // 标题名称
setSize(240, 350); // 窗口大小
setLocationRelativeTo(null);// 窗口居中
setLayout(new BorderLayout()); // 布局方式
final JTextField lblxian = new JTextField(); // 文本输入框
lblxian.setFont(new Font("宋体", Font.PLAIN, 50)); // 设置字体
lblxian.setPreferredSize(new Dimension(230, 70)); // 设置显示器的大小
JPanel panelxian = new JPanel(); // 容器
panelxian.add(lblxian);
add(panelxian, BorderLayout.NORTH); // 加到窗口上
JPanel panelS = new JPanel();
add(panelS, BorderLayout.SOUTH);
panelS.setLayout(new GridLayout(5, 4)); // 设置布局方式
JButton btnAC = new JButton("AC"); // 清空数字的按钮
// 监听器
btnAC.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(""); // 设置数字为空,清空数字

}
});
panelS.add(btnAC);
add(panelS);
JButton btnZhengFu = new JButton("+/-");
panelS.add(btnZhengFu);
add(panelS);
JButton btnBai = new JButton("%"); // 百分号按钮
// 监听器
btnBai.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
double num = Double.parseDouble(lblxian.getText());
lblxian.setText("" + (num / 100));

}
});
panelS.add(btnBai);
add(panelS);
JButton btnChu = new JButton("/"); // 除号按钮
// 监听器
btnChu.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
if (lblxian.getText().indexOf("/") > 0) { // 判断是否有除号,有的话不能再输入除号
} else {
lblxian.setText(lblxian.getText() + "/");
}
}
});
btnChu.setBackground(Color.orange);
panelS.add(btnChu);
add(panelS);
JButton btn7 = new JButton("7"); // 数字7按钮
btn7.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

lblxian.setText(lblxian.getText() + 7);


}
});
panelS.add(btn7);
add(panelS);
JButton btn8 = new JButton("8");// 数组8的按钮
btn8.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

lblxian.setText(lblxian.getText() + 8);

}
});
panelS.add(btn8);
add(panelS);
JButton btn9 = new JButton("9");// 数字9的按钮
btn9.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

lblxian.setText(lblxian.getText() + 9);

}
});
panelS.add(btn9);
add(panelS);
JButton btnCheng = new JButton("X");// 乘号的按钮
btnCheng.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) { // 判断是否有乘号,有的话,不能再输入乘号
if (lblxian.getText().indexOf("*") > 0) {

} else {
lblxian.setText(lblxian.getText() + "*");
}
}
});
btnCheng.setBackground(Color.orange);
panelS.add(btnCheng);
add(panelS);
JButton btn4 = new JButton("4"); // 数字4的按钮
btn4.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

lblxian.setText(lblxian.getText() + 4);

}
});
panelS.add(btn4);
add(panelS);
JButton btn5 = new JButton("5");// 数字5的按钮
btn5.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

lblxian.setText(lblxian.getText() + 5);

}
});
panelS.add(btn5);
add(panelS);
JButton btn6 = new JButton("6");// 数字6的按钮
btn6.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

lblxian.setText(lblxian.getText() + 6);

}
});
panelS.add(btn6);
add(panelS);
JButton btnJian = new JButton("-");// 减号的按钮
btnJian.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
if (lblxian.getText().indexOf("-") > 0) { // 判断是否有减号,有的话不用再输入减号

} else {
lblxian.setText(lblxian.getText() + "-");
}
}
});
btnJian.setBackground(Color.orange);
panelS.add(btnJian);
add(panelS);
JButton btn1 = new JButton("1");// 数字1的按钮
btn1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

lblxian.setText(lblxian.getText() + 1);

}
});
panelS.add(btn1);
add(panelS);
JButton btn2 = new JButton("2");// 数字2的按钮
btn2.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

lblxian.setText(lblxian.getText() + 2);

}
});
panelS.add(btn2);
add(panelS);
JButton btn3 = new JButton("3");// 数字3的按钮
btn3.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

lblxian.setText(lblxian.getText() + 3);

}
});
panelS.add(btn3);
add(panelS);
JButton btnJia = new JButton("+");// 加号的按钮
btnJia.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
if (lblxian.getText().indexOf("+") > 0) { // 判断是否有加号,有的话不能再输入加号

} else {
lblxian.setText(lblxian.getText() + "+");
}
}
});
btnJia.setBackground(Color.orange);
panelS.add(btnJia);
add(panelS);
JButton btn0 = new JButton("0");// 数字0的按钮
btn0.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 0);

}
});
panelS.add(btn0);
add(panelS);
JButton btnTui = new JButton("←");// 退格的按钮
btnTui.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
String c = lblxian.getText();
String num = c.substring(0, c.length() - 1); // 截图输入框中字符从0到倒数第二个的字符
lblxian.setText(num);

}
});
panelS.add(btnTui);
add(panelS);
JButton btnDian = new JButton(".");// 小数点的按钮
btnDian.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + ".");
}
});
panelS.add(btnDian);
add(panelS);
JButton btnDeng = new JButton("=");// 等号的按钮
btnDeng.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
/**
* 加法计算
*/
String content = lblxian.getText(); // 获取文本框的数
int i = content.indexOf("+"); // 搜索加号的位置
if (i > 0) {
// 加法
String num1 = content.substring(0, i); // 截取加号前的数字
String num2 = content.substring(i + 1, content.length());// 截取加号以后的数字
try {
double fNum = Double.parseDouble(num1);// 强行转化为double的数据类型
double sNum = Double.parseDouble(num2);// 强行转化为double的数据类型
double sum = fNum + sNum; // 两数相加
lblxian.setText("" + sum);// 输出到文本框

} catch (Exception e2) {

}
}


/**
* 减法计算
*/


String content1 = lblxian.getText();// 获取文本框数字
int j = content1.indexOf("-"); // 搜索减号的位置
if (j > 0) {
// 减法
String num1 = content1.substring(0, j); // 截取减号前的数字
String num2 = content1.substring(j + 1, content1.length()); // 截取减号后的数字
try {
double fNum = Double.parseDouble(num1);// 强行转化为double的数据类型
double sNum = Double.parseDouble(num2);// 强行转化为double的数据类型
double jian = fNum - sNum; // 两数相减
lblxian.setText("" + jian); // 设置文本框

} catch (Exception e2) {

}
}


/**
* 乘法计算
*/
String content2 = lblxian.getText();// 获取文本框数字
int k = content2.indexOf("*"); // 搜索乘号的位置
if (k > 0) {
// 乘法
String num1 = content2.substring(0, k); // 截取乘号前的数字
String num2 = content2.substring(k + 1, content2.length());// 截取乘号后面的数字
try {
double fNum = Double.parseDouble(num1);// 强行转化为double的数据类型
double sNum = Double.parseDouble(num2);// 强行转化为double的数据类型
double cheng = fNum * sNum;// 两数相乘
lblxian.setText("" + cheng); // 设置文本框

} catch (Exception e2) {

}
}
/**
* 除法计算
*/


String content3 = lblxian.getText();// 获取文本框的内容
int l = content3.indexOf("/"); // 搜索除号的位置
if (l > 0) {
// 除法
String num1 = content3.substring(0, l);// 截取除号前的数字
String num2 = content3.substring(l + 1, content3.length());// 截取除号后的数字
try {
double fNum = Double.parseDouble(num1);// 强行转化为double的数据类型
double sNum = Double.parseDouble(num2);// 强行转化为double的数据类型
double chu = fNum / sNum;// 两数相除
lblxian.setText("" + chu);// 设置文本框内容

} catch (Exception e2) {

}
}


}
});
btnDeng.setBackground(Color.orange);
panelS.add(btnDeng);
add(panelS);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口
setVisible(true);// 显示窗口
}


}


原创粉丝点击