Java - GUI界面实现简单计算器
作者:互联网
一、功能介绍
- (1)实现基本的加减乘除功能。
- (2)使用匿名类为加减乘除按键设置监听器 。
- (3)监听器的基本应用。
学习了GUI界面,没用具体的应用,在这里简单的编写一个计算器的应用。
二、代码实现
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
public class example10 {
private static void createAndShowGUI()
{
//创建一个顶级容器
JFrame jFrame=new JFrame("计算器");
jFrame.setLayout(new BorderLayout());
//设置容器大小
jFrame.setSize(250,300);
//用来显示相对于界面的位置
jFrame.setLocation(400,400);
//创建一个网格式面板,并添加到容器里边
JPanel jPanel=new JPanel(new GridLayout(4,4,10,25));
JPanel jPanel1=new JPanel(new FlowLayout(FlowLayout.CENTER,10,25));
//创建一个文本框显示界面
JTextField jTextField=new JTextField(20);
//用来记录用户所输入的数字和字符串
List<String> lists=new ArrayList<String>();
jPanel.add(jTextField);
String [] strings=new String[] {"1","2","3","+","4","5","6","-","7","8","9","*",
".","0","=","/"};
String [] st=new String[]{"AC","BECK","CE"};
//添加按键 AC CE BECK
JButton AC=new JButton(st[0]);
JButton Beck=new JButton(st[1]);
JButton CE=new JButton(st[2]);
//将上边三个按键添加到面板上
jPanel1.add(AC);
jPanel1.add(Beck);
jPanel1.add(CE);
//添加按钮 "1","2","3","+","4","5","6","-","7","8","9","*",".","0","=","/"
JButton jButton1=new JButton(strings[0]);
JButton jButton2=new JButton(strings[1]);
JButton jButton3=new JButton(strings[2]);
JButton add=new JButton(strings[3]);
JButton jButton4=new JButton(strings[4]);
JButton jButton5=new JButton(strings[5]);
JButton jButton6=new JButton(strings[6]);
JButton sum=new JButton(strings[7]);
JButton jButton7=new JButton(strings[8]);
JButton jButton8=new JButton(strings[9]);
JButton jButton9=new JButton(strings[10]);
JButton ChenFa=new JButton(strings[11]);
JButton Point=new JButton(strings[12]);
JButton jButton0=new JButton(strings[13]);
JButton result=new JButton(strings[14]);
JButton ChuFa=new JButton(strings[15]);
//将按键添加到面板上
jPanel.add(jButton1);
jPanel.add(jButton2);
jPanel.add(jButton3);
jPanel.add(add);
jPanel.add(jButton4);
jPanel.add(jButton5);
jPanel.add(jButton6);
jPanel.add(sum);
jPanel.add(jButton7);
jPanel.add(jButton8);
jPanel.add(jButton9);
jPanel.add(ChenFa);
jPanel.add(Point);
jPanel.add(jButton0);
jPanel.add(result);
jPanel.add(ChuFa);
//将面板加到容器里边
jFrame.add(jTextField,BorderLayout.PAGE_START);
jFrame.add(jPanel1,BorderLayout.CENTER);
jFrame.add(jPanel,BorderLayout.PAGE_END);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//添加监听器
//添加AC监听器
AC.addActionListener(e->{
lists.clear();
jTextField.setText("");
});
//添加Beck监听器
Beck.addActionListener(e->{
String text=jTextField.getText();//得到输入文本框
//如果文本框的内容是空或者长度是一,直接将文本框的内容设置为空
if("".equals(text)||text.length()==1)
{
jTextField.setText("");
return ;
}
//如果文本的长度大于1就要向前截取
if(text.length()>1)
{
text=text.substring(0,text.length()-1);
jTextField.setText(text);
}
});
//添加CE监听器
CE.addActionListener(e->{
String text=jTextField.getText();
if("".equals(text))
{
return ;
}
//将加减乘除移除,防止出现错误
if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
{
lists.remove(0);
}
//直接将文本框清空
jTextField.setText("");
});
//添加数字按键的监听器 使用匿名类 然后再用匿名类创建数字按键的监听器
ActionListener actionListener=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//得到文本框内容
String text=jTextField.getText();
//除数不能为0 ,如果有,点击数字键就会消失
if("除数不为0".equals(text))
{
jTextField.setText(e.getActionCommand());
return ;
}
//如果是0,只能输入小数点
if("0".equals(text))
{
return ;
}
//如果文本域是空,就把当前点击的按键 添加入文本框中
if("".equals(text))
{
jTextField.setText(e.getActionCommand());
}
else
{
//如果当前文本框有数据,并且是 运算符 记录运算符
if(text.equals("+")||text.equals("-")||text.equals("*")||text.equals("/"))
{
//记录下运算符,并且将文本框设置为空
lists.add(text);
jTextField.setText("");
//将文本框中的数字设置为0
text="";
}
text+=e.getActionCommand();
jTextField.setText(text);
}
}
};
//为数字设置监听器
jButton1.addActionListener(actionListener);
jButton2.addActionListener(actionListener);
jButton3.addActionListener(actionListener);
jButton4.addActionListener(actionListener);
jButton5.addActionListener(actionListener);
jButton6.addActionListener(actionListener);
jButton7.addActionListener(actionListener);
jButton8.addActionListener(actionListener);
jButton9.addActionListener(actionListener);
//为 0 按键设置监听器
jButton0.addActionListener(e->{
String text=jTextField.getText();
//如果是 0 就不可以再为 0
if("0".equals(text))
{
return ;
}
//如果是运算符 记录下运算符
if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
{
lists.add(text);
text="";
}
text+=e.getActionCommand();
jTextField.setText(text);
});
//为小数点设置监听器
Point.addActionListener(e->{
String text=jTextField.getText();
if("".equals(text))
{
return ;
}
//判断是否是运算符
if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
{
return ;
}
//数字后边不能同时出现两个小数点
if(text.contains("."))
{
return ;
}
text+=e.getActionCommand();
jTextField.setText(text);
});
//为加减乘除按键设置监听器 使用匿名类
ActionListener actionListener1=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text=jTextField.getText();
if("".equals(text))
{
return ;
}
if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
{
return ;
}
//将内容添加到集合里边
lists.add(text);
//将文本框清空
jTextField.setText("");
//获取按键上边的数字
jTextField.setText(e.getActionCommand());
}
};
//为加减乘除设置监听器
sum.addActionListener(actionListener1);
add.addActionListener(actionListener1);
ChenFa.addActionListener(actionListener1);
ChuFa.addActionListener(actionListener1);
//为 = 添加监听器
ActionListener actionListener2=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//判断集合数据
if(lists.isEmpty())
{
return ;
}
String text=jTextField.getText();
if("+".equals(text)||"-".equals(text)||"*".equals(text)||"/".equals(text))
{
return ;
}
//将其添加在集合里边
lists.add(text);
if(lists.size()<3)
{
return ;
}
String one=lists.get(0);//获取集合的第一个数
String two=lists.get(1);//获取集合的第二个数
String three=lists.get(2);//获取集合的第三个数
switch (two)
{
case "+":
//Double类中本来就有个方法parseDouble() ,作用是把字符串转换为Double。
double i=Double.parseDouble(one);
double j=Double.parseDouble(three);
jTextField.setText((i+j)+"");
break ;
case "-":
double x=Double.parseDouble(one);
double y=Double.parseDouble(three);
jTextField.setText((x-y)+"");
break;
case "*":
double m=Double.parseDouble(one);
double n=Double.parseDouble(three);
jTextField.setText((m*n)+"");
break;
case "/":
double k=Double.parseDouble(one);
double z=Double.parseDouble(three);
if(z==0)
{
jTextField.setText("除数不为0");
lists.clear();
return ;
}
jTextField.setText((k/z)+"");
break;
}
//将集合清空
lists.clear();
}
};
//为等号添加监听器
result.addActionListener(actionListener2);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(example10::createAndShowGUI);
}
}
三、显示界面
- (1)运行结果(4*5的运算结果)
标签:Java,text,GUI,equals,add,计算器,new,JButton,jTextField 来源: https://blog.csdn.net/qq_44863179/article/details/104619344