本文实例讲述了Java swing实现的计算器功能。分享给大家供大家参考,具体如下:

package awtDemo;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.util.Vector;

public class Calculator {

String str1 = "0"; // 运算数1 初值一定为0 为了程序的安全

String str2 = "0"; // 运算数2

String signal = "+"; // 运算符

String result = "";// 结果

// 状态开关

int k1 = 1;// 开关1 用于选择输入方向 将要写入str2或 str2

int k2 = 1;// 开关2 符号键 次数 k2>1说明进行的是2+3-9+8 这样的多符号运算

int k3 = 1;// 开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0

int k4 = 1;// 开关4 str2 同上

int k5 = 1;// 开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉

JButton store; // 寄存器 记录 是否连续按下符号键

@SuppressWarnings("rawtypes")

Vector vt = new Vector(20, 10);

JFrame frame = new JFrame("脚本之家 - 计算器");

JTextField result_TextField = new JTextField(result, 20);// 20列

JButton clear_Button = new JButton("清除");

JButton button0 = new JButton("0");

JButton button1 = new JButton("1");

JButton button2 = new JButton("2");

JButton button3 = new JButton("3");

JButton button4 = new JButton("4");

JButton button5 = new JButton("5");

JButton button6 = new JButton("6");

JButton button7 = new JButton("7");

JButton button8 = new JButton("8");

JButton button9 = new JButton("9");

JButton button_Dian = new JButton(".");

JButton button_jia = new JButton("+");

JButton button_jian = new JButton("-");

JButton button_cheng = new JButton("*");

JButton button_chu = new JButton("/");

JButton button_dy = new JButton("=");

Calculator() {

button0.setMnemonic(KeyEvent.VK_0);// 等效键

// 其它 等效键 略,

result_TextField.setHorizontalAlignment(JTextField.RIGHT);// 文本框 右对齐

JPanel pan = new JPanel();

pan.setLayout(new GridLayout(4, 4, 5, 5));// 四行四列 边距为5像素

pan.add(button7);

pan.add(button8);

pan.add(button9);

pan.add(button_chu);

pan.add(button4);

pan.add(button5);

pan.add(button6);

pan.add(button_cheng);

pan.add(button1);

pan.add(button2);

pan.add(button3);

pan.add(button_jian);

pan.add(button0);

pan.add(button_Dian);

pan.add(button_dy);

pan.add(button_jia);

pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// pan对象的边距

JPanel pan2 = new JPanel();

pan2.setLayout(new BorderLayout());

pan2.add(result_TextField, BorderLayout.WEST);

pan2.add(clear_Button, BorderLayout.EAST);

frame.setLocation(300, 200); // 主窗口 出现在位置

frame.setResizable(false); // 不能调大小

frame.getContentPane().setLayout(new BorderLayout());

frame.getContentPane().add(pan2, BorderLayout.NORTH);

frame.getContentPane().add(pan, BorderLayout.CENTER);

frame.pack();

frame.setVisible(true);

// 事件处理 程 序

// 数 字 键

class Listener implements ActionListener {

@SuppressWarnings("unchecked")

public void actionPerformed(ActionEvent e) {

String ss = ((JButton) e.getSource()).getText();

store = (JButton) e.getSource();

vt.add(store);

if (k1 == 1) {

if (k3 == 1) {

str1 = "";

k5 = 1;// 还原开关k5状态

}

str1 = str1 + ss;

k3 = k3 + 1;

result_TextField.setText(str1);// 显示

} else if (k1 == 2) {

if (k4 == 1) {

str2 = "";

k5 = 1; // 还原开关k5状态

}

str2 = str2 + ss;

k4 = k4 + 1;

result_TextField.setText(str2);

}

}

}

// 符 号

class Listener_signal implements ActionListener {

@SuppressWarnings("unchecked")

public void actionPerformed(ActionEvent e) {

String ss2 = ((JButton) e.getSource()).getText();

store = (JButton) e.getSource();

vt.add(store);

if (k2 == 1) {

k1 = 2;// 开关 k1 为1时,向数1写 为2时,向数2写

k5 = 1;

signal = ss2;

k2 = k2 + 1;// 按符号键的次数

} else {

int a = vt.size();

JButton c = (JButton) vt.get(a - 2);

if (!(c.getText().equals("+"))

&& !(c.getText().equals("-"))

&& !(c.getText().equals("*"))

&& !(c.getText().equals("/")))

{

cal();

str1 = result;

k1 = 2;// 开关 k1 为1时,向数1写 为2时,向数2写

k5 = 1;

k4 = 1;

signal = ss2;

}

k2 = k2 + 1;

}

}

}

// 清除

class Listener_clear implements ActionListener {

@SuppressWarnings("unchecked")

public void actionPerformed(ActionEvent e) {

store = (JButton) e.getSource();

vt.add(store);

k5 = 1;

k2 = 1;

k1 = 1;

k3 = 1;

k4 = 1;

str1 = "0";

str2 = "0";

signal = "";

result = "";

result_TextField.setText(result);

vt.clear();

}

}

// 等 于

class Listener_dy implements ActionListener {

@SuppressWarnings("unchecked")

public void actionPerformed(ActionEvent e) {

store = (JButton) e.getSource();

vt.add(store);

cal();

k1 = 1; // 还原开关k1状态

// str1=result;

k2 = 1;

k3 = 1;// 还原开关k3状态

k4 = 1; // 还原开关k4状态

str1 = result; // 为7+5=12 +5=17 这种计算做准备

}

}

// 小数点

class Listener_xiaos implements ActionListener {

@SuppressWarnings("unchecked")

public void actionPerformed(ActionEvent e) {

store = (JButton) e.getSource();

vt.add(store);

if (k5 == 1) {

String ss2 = ((JButton) e.getSource()).getText();

if (k1 == 1) {

if (k3 == 1) {

str1 = "";

k5 = 1; // 还原开关k5状态

}

str1 = str1 + ss2;

k3 = k3 + 1;

result_TextField.setText(str1);// 显示

} else if (k1 == 2) {

if (k4 == 1) {

str2 = "";

k5 = 1; // 还原开关k5状态

}

str2 = str2 + ss2;

k4 = k4 + 1;

result_TextField.setText(str2);

}

}

k5 = k5 + 1;

}

}

// 注册 监听器

Listener_dy jt_dy = new Listener_dy();

Listener jt = new Listener();// 临听数字键

Listener_signal jt_signal = new Listener_signal();// 临 听符 号键

Listener_clear jt_c = new Listener_clear(); // 清除键

Listener_xiaos jt_xs = new Listener_xiaos();// 小数点 键

button7.addActionListener(jt);

button8.addActionListener(jt);

button9.addActionListener(jt);

button_chu.addActionListener(jt_signal);

button4.addActionListener(jt);

button5.addActionListener(jt);

button6.addActionListener(jt);

button_cheng.addActionListener(jt_signal);

button1.addActionListener(jt);

button2.addActionListener(jt);

button3.addActionListener(jt);

button_jian.addActionListener(jt_signal);

button0.addActionListener(jt);

button_Dian.addActionListener(jt_xs);

button_dy.addActionListener(jt_dy);

button_jia.addActionListener(jt_signal);

clear_Button.addActionListener(jt_c);

// 关闭事件处理程序

frame.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

// 计 算

public void cal() {

double a2;// 运算数1

double b2;// 运算数2

String c = signal;// 运算符

double result2 = 0;// 结果

if (c.equals("")) {

result_TextField.setText("请输入运算符");

} else {

if (str1.equals(".")) // 字符串 "." 转换成double型数据时 会出错 所以手工转

str1 = "0.0";

if (str2.equals("."))

str2 = "0.0";

a2 = Double.valueOf(str1).doubleValue();

b2 = Double.valueOf(str2).doubleValue();

if (c.equals("+")) {

result2 = a2 + b2;

}

if (c.equals("-")) {

result2 = a2 - b2;

}

if (c.equals("*")) {

result2 = a2 * b2;

}

if (c.equals("/")) {

if (b2 == 0) {

result2 = 0;

} else {

result2 = a2 / b2;

}

}

result = ((new Double(result2)).toString());

result_TextField.setText(result);

}

}

@SuppressWarnings("unused")

public static void main(String[] args) {

// 界面风格,可以去除

try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

} catch (Exception e) {

e.printStackTrace();

}

Calculator cal = new Calculator();

}

}

运行效果:

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

希望本文所述对大家java程序设计有所帮助。

java swing实现计算器_Java swing实现的计算器功能完整实例相关推荐

  1. python课程设计计算器_Python设计实现的计算器功能完整实例

    本文实例讲述了Python设计实现的计算器功能.分享给大家供大家参考,具体如下: 通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/ ...

  2. java swing中计算器_java swing示例(计算器)

    java核心技术卷一-第九章例9-1(计算器) /* * To change this license header, choose License Headers in Project Proper ...

  3. java swing实现计算器,Java swing实现的计算器功能完整实例

    本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event ...

  4. java gui拖拽_Java Swing拖放

    Java Swing教程 - Java Swing拖放 拖放(DnD)是一种在应用程序中传输数据的方法. DnD允许我们通过拖动组件并将其拖放到另一个组件上来传输数据. 拖动的组件称为拖动源;它提供要 ...

  5. java swing最小化_Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果)...

    Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果) package swing; import java.awt.AWTException; import java ...

  6. java.swing调难度_Java Swing BorderLayout调整了难度

    你可以在你的情况下使用的是 GridLayout,这里有两个JButtons会在JFrame调整大小时自行调整大小. import java.awt.GridLayout; import javax. ...

  7. java swing事件机制_java SWing事件调用的两种机制

    /** * java swing中事件调用的两种机制: * (一)响应机制 * (二)回调机制 */ package test; import java.awt.*; import java.awt. ...

  8. java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...

    这篇文字将要学习以下知识点: 1.如何给JButton按钮添加鼠标点击事件监听器 #1.addMouseListener(MouseListener l)  给JButton添加一个鼠标点击监听器l ...

  9. java scrollpane 设置透明_java swing 之 JScrollPane(滚动面板)的使用

    /** * java swing 之JScrollPane面板 * 在设置界面时,可能会遇到在一个较小的容器窗体中显示一个较大部分的内容,这时可以使用 * JScrollPane面板,JscrollP ...

最新文章

  1. android 内核 netlink 上报,Network Daemon(Android Netd)架构和源码分析
  2. [Windows编程] C++中 bool,BOOL ,VARIANT_BOOL 的区别
  3. 快速排序的难点_数据结构考研重难点解析:快速排序
  4. leetcode 28. Implement strStr() 实现strStr()
  5. 2.24. Spring boot with Apache Kafka
  6. [似水流年]夜色渐深窗内静坐有感
  7. mysql添加外键约束的语法_Mysql添加外键约束.
  8. lamp php的ssl,ssh支持
  9. 计算反转录转座子插入时间二:提取成对LTRs序列
  10. HTTP协议与Tomcat服务器
  11. Android添加拍照功能,Android开发实现拍照功能的方法实例解析
  12. length () 和 length 的区别
  13. 汇编“从键盘输入一串字符,分别统计其中字母、数字和其
  14. 程序员眼中的漫威!太有才了!
  15. labview在不同VI间传递波形(全局变量)
  16. echarts生成图表的简单使用
  17. 12.2 Kruskal算法
  18. 大脑神经网络对比图高清,图神经网络和神经网络
  19. 阅读笔记-软件工程的大泥球
  20. Ubuntu蓝牙Bluetooth命令行连接发送文件完整流程

热门文章

  1. C语言strstr()函数(在主字符串里查找子字符串,返回第一次找到的子字符串以及后面的字符串)
  2. 黑马程序员C语言基础(第四天)数据类型
  3. python all()函数 (判断可迭代对象中是否全为True)
  4. python PyQt5 QComboBox类(下拉列表框、组合下拉框)
  5. python进阶(小白也能看懂)——*args与**kwargs的使用
  6. Java进阶:@FunctionalInterface函数式接口使用说明
  7. vue教程2:vue基础
  8. Filebeat常用配置
  9. java actor模型实例,详解Theron通过Actor模型解决C++并发编程的一种思维
  10. python多线程库_Python多线程常用包对比