一般来说,刚开始学习Java比较适合做一些小的东西,比如计算器、图书管理系统什么的,这样会学的稍微快一些。而我这个计算器正适合新手参考,为什么?因为我也是新手。虽说代码比较烂,但是很…
我先说下大致思路:第一步是先把界面写出来,第二步是对界面的各个按钮实现监听。实现等号这个功能复杂一些,不过还可以理解
看一下效果图(我是在网上找一个图片,然后照着图片做的界面)
源码链接: https://pan.baidu.com/s/1mXCmbjGklwsC7-UlTcxTew
提取码:yab3
tip:下载后,解压一下,然后百度下eclipse怎么导入项目导入就好了。
或者是看下边的两段。
CalMain类和main方法
public class CalMain {
public static void main(String[] args) {
Calculate.Calculate();
}
}
Calculate类和CalCulate方法
import java.awt.Dimension;
import java.awt.Font;
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 Calculate extends JFrame {
private static final long serialVersionUID = 1L;
public static void Calculate() {
JFrame frame = new JFrame("简易计算器");
frame.setBounds(650, 250, 385, 645);
JPanel panel = new JPanel();
JTextField textfield = new JTextField();
textfield.setPreferredSize(new Dimension(355,100));
JButton button[] = new JButton [20];
StringBuffer s = new StringBuffer();//StringBuffer 允许对字符串多次修改,不产生新的未使用对象,定义s
//添加数字按钮
//setBound(a,b,width,height) 窗口初始位置(a,b),宽是width,高是height
button[1] = new JButton("7");
button[2] = new JButton("8");
button[3] = new JButton("9");
button[4] = new JButton("/");
button[5] = new JButton("4");
button[6] = new JButton("5");
button[7] = new JButton("6");
button[8] = new JButton("*");
button[9] = new JButton("1");
button[10] = new JButton("2");
button[11] = new JButton("3");
button[12] = new JButton("-");
button[13] = new JButton(".");
button[14] = new JButton("0");
button[15] = new JButton("=");
button[16] = new JButton("+");
button[17] = new JButton("清空");
button[18] = new JButton("退格");
textfield.setFont(new Font("宋体",Font.CENTER_BASELINE,25));
panel.add(textfield);
for(int i=17;i<=18;i++) {
button[i].setPreferredSize(new Dimension(175, 100));
button[i].setFont(new Font("宋体",Font.CENTER_BASELINE,25));
panel.add(button[i]);
}
for(int i=1; i<=16;i++) {
button[i].setPreferredSize(new Dimension(85,90));
button[i].setFont(new Font("宋体",Font.CENTER_BASELINE,25));
panel.add(button[i]);
}
//监视器,处理事件源并显示到文本框
button[1].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("7"); //StringBuffer.append() 是创建一个新数组,扩大了长度,把需要添加的字符串复制到里面去
String str = s.toString();
textfield.setText(str);
}
} );
button[2].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("8");
String str = s.toString();
textfield.setText(str);
}
} );
button[3].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("9");
String str = s.toString();
textfield.setText(str);
}
} );
button[4].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(s.length()!=0) { //第一个数不能是除号
int length = s.length();
String over = s.substring(length-1, length);
if(!("/".equals(over))) { //不能续输入两个除号
s.append("/");
String str = s.toString();
textfield.setText(str);
}
}
}
} );
button[5].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("4");
String str = s.toString();
textfield.setText(str);
}
} );
button[6].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("5");
String str = s.toString();
textfield.setText(str);
}
} );
button[7].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("6");
String str = s.toString();
textfield.setText(str);
}
} );
button[8].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(s.length()!=0) { //第一个数不能是乘号
int length2 = s.length();
String over2 = s.substring(length2-1, length2);
if(!("*".equals(over2))) { //不能续输入两个乘号
s.append("*");
String str = s.toString();
textfield.setText(str);
}
}
}
} );
button[9].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("1");
String str = s.toString();
textfield.setText(str);
}
} );
button[10].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("2");
String str = s.toString();
textfield.setText(str);
}
} );
button[11].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("3");
String str = s.toString();
textfield.setText(str);
}
} );
button[12].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(s.length()==0) { //输入第一个减号
s.append("-");
String str = s.toString();
textfield.setText(str);
} else { //从第二个数开始,不能连续输入两个减号
int length3 = s.length();
String over3 = s.substring(length3-1, length3);
if(!("-".equals(over3))) { //不能续输入两个减号
s.append("-");
String str = s.toString();
textfield.setText(str);
}
}
}
} );
button[13].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append(".");
String str = s.toString();
textfield.setText(str);
}
} );
button[14].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s.append("0");
String str = s.toString();
textfield.setText(str);
}
} );
button[16].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(s.length()==0) { //输入第一个加号
s.append("+");
String str = s.toString();
textfield.setText(str);
} else { //从第二个数开始,不能连续输入两个加号
int length4 = s.length();
String over4 = s.substring(length4-1, length4);
if(!("+".equals(over4))) { //不能续输入两个加号
s.append("+");
String str = s.toString();
textfield.setText(str);
}
}
}
} );
//按钮‘清空’,监听到按钮后清空
button[17].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
textfield.setText("");
s.delete(0, s.length());
}
});
//按钮‘退格’,监听到按钮后退格
button[18].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(s.length()!=0) {//只有在s字符串不为空时才可以退格
s.delete(s.length()-1, s.length());
String str = s.toString();
textfield.setText(str);
}
}
});
//点击按钮"=",将计算结果
button[15].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(s.length()!=0) { //第一个数不能是等号
String ss = null;
//判断是用GUI页面输入,如果是符号加数字,前补零,并把值赋值给ss
if(s.toString().length() != 0) {
if(s.toString().length() == 2 ) {
ss = s.insert(0, 0).toString();
} else {
ss = s.toString();
}
} else { //判断是用键盘输入,如果是符号加数字,前补零,并把输入的值赋给ss
if(textfield.getText().toString().length() == 2) {
StringBuffer stbu = new StringBuffer(textfield.getText());
ss = stbu.insert(0,0).toString();
} else {
ss = textfield.getText().toString();
}
}
String index = "[-]|[+]|[/]|[*]";
String number[] = ss.split(index);//split()方法,是根据给定的正则表达式分割字符串
int count = number.length;//count记录被分割几段
if(count>2) { //因为不能连续计算,所以count>2时,即超过2个数运算,返回错误信息
textfield.setText("暂未实现连续计算");
} else { //只有两个数运算时
Double num[] = new Double[count];
for(int i = 0; i<count; i++) {
num[i] = Double.parseDouble(number[i]);
}
double result = 0;
if(ss.contains("*")) {
result = num[0];
for(int i=1; i<count; i++) {
result*=num[i];
}
}
if(ss.contains("/")) {
result = num[0];
for(int i=1; i<count; i++) {
if(num[i]==0) {
textfield.setText("出错");
return;
}
else {
result/=num[i];
}
}
}
if(ss.contains("-")) {
result = num[0];
for(int i=1; i<count; i++) {
result-=num[i];
}
}
if(ss.contains("+")) {
result = num[0];
for(int i=1; i<count; i++) {
result+=num[i];
}
}
textfield.setText(ss+"="+result);
}
}
}
});
frame.add(panel);
frame.setVisible(true); //窗口可见
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);; //可放大或者关闭窗口
}
}