java 简单计算器设计_用Java设计简易的计算器

这篇博客展示了如何使用Java设计一个简单的计算器,包括加减乘除功能。计算器的改进版增加了输入验证,确保输入的数字有效。通过添加FocusListener监听器,当文本框失去焦点时检查输入是否为数字,若非数字则给出提示。
摘要由CSDN通过智能技术生成

运行初始状态:

086854e90c526c1b5dfd1db5b27aba61.png

计算结果如下:

bd8e077fd2a9aa9d259680b25d8991b8.png

4c999b54b2e53d0268eff8eae87766cb.png

0ba3fac2f2c2e4afefc9db6b99f95ff7.png

a55e72ea1c06847cae05283c6bae3233.png

代码如下:

package jisuanqi;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

class counter1 extends JFrame

{

public counter1()

{

super("计算器");

this.setSize(400,100);

this.setLocation(300,240);

this.setLayout(new FlowLayout()); //确定窗口格式为流输入

TextField text1=new TextField(4);

text1.setText("1");

this.add(text1);

String proList[] = { "+","-","x" ,"%"}; //将"+","-","x" ,"%"作为列表元素

TextField text;

JComboBox comboBox; //创建下拉复选框

Container conPane = getContentPane(); //创建一个名为conPane的容器

comboBox = new JComboBox(proList); //把列表元素加入下拉复选框

comboBox.setEditable(true); //使复选框变为可操作

conPane.add(comboBox); //将复选框加入容器中

TextField text2=new TextField(4);

text2.setText("1");

this.add(text2);

JButton button = new JButton("=");

this.add(button);

TextField text3=new TextField(4);

text3.setText("2");

button.addActionListener(new ActionListener(){ //添加按钮监听事件

public void actionPerformed(ActionEvent e) //创建事件响应函数

{

String s=comboBox.getEditor().getItem().toString(); //获取复选框中的元素

double a= Integer.parseInt(text1.getText()); //将两个文本框中的字符串强制转换成浮点型,以便于之后的计算

double b= Integer.parseInt(text2.getText());

if(s.equals("+")) { //判断复选框中的元素种类

double t=a+b;

String m=String.valueOf(t); //由于文本框中的数据流只能为字符串,这里就需要将计算得到的浮点型数据强制转换成字符串型

text3.setText(m); //将最后的结果放在文本框中

}

else if(s.equals("-")) //后面的与之前的类似,不在注释

{double t=a-b;

String m=String.valueOf(t);

text3.setText(m);}

else if(s.equals("x"))

{double t=a*b;

String m=String.valueOf(t);

text3.setText(m);}

else

{double t=a/b;

String m=String.valueOf(t);

text3.setText(m);}

}});

conPane.add(text3);

this.setVisible(true); //将窗口设置为可视化

}

}

public class Counter {

public static void main(String[] args)

{

new counter1();

}

}

修改版如下:

8b1023c98331372a5f95fcff2c2f8ae2.png

32954e3a1787305587bbfa36b2c747ed.png

636862dec2155536f0fd8706cb9ba819.png

37d375cb9add647a893a9ae51f5d065d.png

源码如下:

package jisuanqi;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.FocusEvent;

import java.awt.event.FocusListener;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

class counter1 extends JFrame

{

public counter1()

{

super("计算器");

this.setSize(400,130);

this.setLocation(300,240);

this.setLayout(new FlowLayout()); //确定窗口格式为流输入

TextField text1=new TextField(4);

text1.setText("1");

JLabel label1 = new JLabel("");

text1.addFocusListener(new FocusListener() { //添加焦点事件监听器

public void focusGained(FocusEvent arg0) { //设置获得焦点时的事件

label1.setText("正在输入中...");

}

public void focusLost(FocusEvent arg0) { //设置失去焦点时的事件

if(!text1.getText().matches("\\d+")) //使用正则表达式判断该字符串是否为数字,第一个\是转义符,\d+表示匹配1个或 //多个连续数字,"+"和"*"类似,"*"表示0个或多个

label1.setText("输入的第一个数据有误");

else label1.setText("");

}

});

this.add(text1);

String proList[] = { "+","-","x" ,"%"}; //将"+","-","x" ,"%"作为列表元素

TextField text;

JComboBox comboBox; //创建下拉复选框

Container conPane = getContentPane(); //创建一个名为conPane的容器

comboBox = new JComboBox(proList); //把列表元素加入下拉复选框

comboBox.setEditable(true); //使复选框变为可操作

conPane.add(comboBox); //将复选框加入容器中

TextField text2=new TextField(4);

text2.setText("1");

this.add(text2);

text2.addFocusListener(new FocusListener() {

public void focusGained(FocusEvent arg0) {

label1.setText("正在输入中...");

}

public void focusLost(FocusEvent arg0) {

if(!text2.getText().matches("\\d+"))

label1.setText("输入的第二个数据有误");

else label1.setText("");

}

});

JButton button = new JButton("=");

this.add(button);

TextField text3=new TextField(4);

text3.setText("2");

button.addActionListener(new ActionListener(){ //添加按钮监听事件

public void actionPerformed(ActionEvent e) //创建事件响应函数

{

String s=comboBox.getEditor().getItem().toString(); //获取复选框中的元素

double a= Integer.parseInt(text1.getText()); //将两个文本框中的字符串强制转换成浮点型,以便于之后的计算

double b= Integer.parseInt(text2.getText());

if(s.equals("+")) { //判断复选框中的元素种类

double t=a+b;

String m=String.valueOf(t); //由于文本框中的数据流只能为字符串,这里就需要将计算得到的浮点型数据强制转换成字符串型

text3.setText(m); //将最后的结果放在文本框中

}

else if(s.equals("-")) //后面的与之前的类似,不在注释

{double t=a-b;

String m=String.valueOf(t);

text3.setText(m);}

else if(s.equals("x"))

{double t=a*b;

String m=String.valueOf(t);

text3.setText(m);}

else

{double t=a/b;

String m=String.valueOf(t);

text3.setText(m);}

}});

conPane.add(text3);

this.add(label1);

this.setVisible(true); //将窗口设置为可视化

}

}

public class Counter {

public static void main(String[] args)

{

new counter1();

}

}

总结心得:

(1)在创建选项框时,要将所有的选项放在一个“容器”里,并把这个容器添加到程序中,这里我用的容器为JComboBox comboBox,同时需要导入包javax.swing.ComboBoxEditor和javax.swing.JComboBox;

(2)由于设置了按钮响应功能,所以要设置按键动作和响应,这里导入了包java.awt.event.ActionEvent和java.awt.event.ActionListener

(3)因为文本框中输入读取到的是字符串,所以要进行计算时,要先将其转为整形,在文本框输出时,同理要将整形转换为字符串

(4)注意:当光标移动到文本框上面时,获得焦点事件,当光标移走时,便失去焦点事件,所以要注意两个函数的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值