基于Java swing组件实现简易计算器
作者:海螺肉 发布时间:2023-03-29 02:10:07
本文记录了笔者的第一个Java程序,基于Java抽象窗口工具(abstract window toolkit , AWT)和Swing(Swing属于Java Foundation Classes的一部分)实现的建议计算器,由于笔者经验有限,初学Java,代码略带bug,无法实现7+5×8之类式子的计算,只能实现算术运算符按从高到低的式子运算,部分代码略显冗杂,希望大家在评论区积极讨论完善代码!
计算器示意图
一、代码相关知识简介
JFrame(框架)
使用JFrame frame = new JFrame("My Frame");可以创建一个名为My Frame的windows框架
import javax.swing.*;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame("My Frame");
frame.setSize(300,300);
frame.setVisible(true);
}
}
JButton(按钮)
使用JButton b = new JButtton("My Button");可创建一个按钮组件。
import java.awt.*;
import javax.swing.*;
public class Test {
JFrame frame;
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame("My Frame");
JButton b = new JButton("My Button");
frame.getContentPane().add(b,BorderLayout.CENTER); //将按钮放在frame框架中央
frame.setSize(300,300);
frame.setVisible(true);
}
}
JPanel(面板)
面板是一个容器,与顶层容器不同,JPanel不能独立存在,必须放在其他容器的内部,下面代码创建了含有一个按钮的红色面板。
import java.awt.*;
import javax.swing.*;
public class Test {
JFrame frame;
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new JFrame("My Frame");
JButton b = new JButton("My Button");
JPanel panel = new JPanel();
panel.add(b);
panel.setBackground(Color.red);
frame.getContentPane().add(panel,BorderLayout.SOUTH); //将面板放在frame框架南方
frame.setSize(300,300);
frame.setVisible(true);
}
}
JTextArea(文本输入框)
使用 JTextArea 类可实现一个文本域,其常用构造方法如下。
①JTextArea():创建一个默认的文本域。
②JTextArea(int rows,int columns):创建一个具有指定行数和列数的文本域。
③JTextArea(String text):创建一个包含指定文本的文本域。
④JTextArea(String text,int rows,int columns):创建一个既包含指定文本,又包含指定行数和列数的多行文本域。
出相关组件介绍外与实现计算器还需对布局有简单了解,本文仅使用GridLayout布局管理器,因此只对此做出介绍,若读者需要还可自行理解其他布局管理器。
GridLayout是一种网络式的布局管理器,将容器空间化为几行几列的形式网格,可将每个组件放在其中一格。
GridLayout定义在java.awt包中,有如下三种构造方法
public GridLayout()
public GridLayout(int rows , int cols) //定义的布局有rows行cools列
public GridLayout(int rows , int cols,int h , int w) ////定义的布局有rows行cools列,水平间距为h,垂直间距为w
二、计算器功能
可实现加、减、乘、除功能,但由于笔者目前能力有限,若使用加、减、乘、除混合功能时需按运算符优先级,从高到小输入式子如7×8+5而不能按5+7×8输入,源代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator implements ActionListener{
JFrame frame;
JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,ba,bd,be,bf,bg,bh,b0,Clear;
JTextArea ta;
String Textcontent ="",sum="";
double result=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Calculator cl = new Calculator();
cl.go();
}
public void go()
{
frame = new JFrame("Calculator");
ta = new JTextArea(1,20); //设置文本框大小为1行20列
ta.setBackground(Color.lightGray);
JPanel cp = new JPanel();
cp.setLayout(new GridLayout(4,4,5,5)); //四行四列,边距为5
JPanel c = new JPanel();
c.setLayout(new GridLayout(1,2,5,5)); //一行两列,边距为5
b0 = new JButton("0");
b0.addActionListener(this); //为每个按钮添加监听接口
b1 = new JButton("1");
b1.addActionListener(this);
b2 = new JButton("2");
b2.addActionListener(this);
b3 = new JButton("3");
b3.addActionListener(this);
b4 = new JButton("4");
b4.addActionListener(this);
b5 = new JButton("5");
b5.addActionListener(this);
b6 = new JButton("6");
b6.addActionListener(this);
b7 = new JButton("7");
b7.addActionListener(this);
b8 = new JButton("8");
b8.addActionListener(this);
b9 = new JButton("9");
b9.addActionListener(this);
ba = new JButton(".");
ba.addActionListener(this);
bd = new JButton("+");
bd.addActionListener(this);
be = new JButton("-");
be.addActionListener(this);
bf = new JButton("×");
bf.addActionListener(this);
bg = new JButton("/");
bg.addActionListener(this);
bh = new JButton("=");
bh.addActionListener(this);
Clear= new JButton("Clear");
Clear.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
Textcontent ="";
result=0;
sum="";
ta.setText("");
}
});
c.add(ta);
c.add(Clear);
c.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
cp.add(b7);
cp.add(b8);
cp.add(b9);
cp.add(bd);
cp.add(b4);
cp.add(b5);
cp.add(b6);
cp.add(be);
cp.add(b1);
cp.add(b2);
cp.add(b3);
cp.add(bf);
cp.add(b0);
cp.add(ba);
cp.add(bh);
cp.add(bg);
cp.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
Container f = frame.getContentPane();
f.add(c,BorderLayout.NORTH);
f.add(cp,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
String content = e.getActionCommand();
ta.append(e.getActionCommand());
getTextContent(content);
}
public void getTextContent(String content)
{
if(content.equals("+")||content.equals("-")||content.equals("×")||content.equals("/"))
{
Textcontent = Textcontent+" "+content+" ";
}
else if(content.equals("="))
{
Textcontent = Textcontent+" "+content;
sum=GetResult(Textcontent);
}
else
{
Textcontent = Textcontent+content;
}
ta.append(sum);
}
public String GetResult(String Textcontent)
{
String n=Textcontent;
String []content=n.split(" ");
result = Double.valueOf(content[0]);
for(int i=1;i<content.length;i++)
{
switch(content[i])
{
case "+":
result = result+Double.valueOf(content[i+1]);
break;
case "-":
result = result-Double.valueOf(content[i+1]);
break;
case "×":
result = result*Double.valueOf(content[i+1]);
break;
case "/":
result = result/Double.valueOf(content[i+1]);
break;
case "=":
break;
}
}
return result+"";
}
}
来源:https://www.cnblogs.com/24Zeng/p/12708151.html


猜你喜欢
- Android UI线程是不安全的,子线程中进行UI操作,可能会导致程序的崩溃,解决办法:创建一个Message对象,然后借助Handler
- android开机自动运行APP实现方式其实很简单。在android系统运行时,会发出“android.intent.action.BOOT
- RenderScript 介绍在开始之前,先看下 RenderScript 的官方介绍:RenderScript is a framewor
- 简介上一篇我们讲了简单的动态BroadCast,今天我们通过手工来发送一条BroadCast进一步来了解BroadCast。在上一篇里我们使
- 本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下源码:import javax.imageio.ImageIO
- 面向对象有封装、继承、多态这三个特性,面向对象编程按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,通过对消息的反
- trim中prefix与suffix等标签用法1.prefix 前缀增加的内容2.suffix 后缀增加的内容3.prefixOverrid
- 要实现摇一摇的功能,类似于微信的摇一摇方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂)方法2:iOS自带的Shake监控AP
- 1. 算法分析根据概率将奖品划分区间,每个区间代表一个奖品,然后抽取 随机数,反查落在那个区间上,即为所抽取的奖品。2. 代码核心
- SpringBoot找不到映射文件org.apache.ibatis.binding.BindingException: Invalid b
- 使用maven引入jar<dependency> <groupId>com.itextpdf</g
- JAVA反射机制JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方
- 前言扫雷是一个常见小游戏,那么如何用C语言实现扫雷呢?学习了二维数组之后,我们可将扫雷的网格区域存储为二维数组,从而使用C语言实现扫雷。1.
- 方法有4种:使用 String 类的 valueOf() 方法使用字符串连接使用 Character 类的 toString() 方法使用字
- 可以指定编码如:utf-8来写入和读取文件。如果文件编码未知,可以通过该方法先得到文件的编码后再指定正确的编码来读取,否则会出现文件乱码问题
- 如果需要集合中的元素何时删除或添加的信息,可以使用ObservableCollection<T>类。这个类是为WPF定义的,这样
- 1. 动态sql动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通过表达式进行判断,对sql
- 前言关系复杂度一、直接插入排序基本思想:将新的数据插入已经排好的数据列中。将第一个和第二个数排序,构成有序数列然后将第三个数插进去,构成新的
- 1. 安装JDK解释: JDK是Java编写环境--开发环境注: 安装路径不可出现中文及标点符号。比如:D:\Java\jdk81.1 下载
- maven项目中在pom.xml中依赖2个jar包,其他的spring的jar包省略:<dependency> &