原文链接:https://blog.csdn.net/yiziweiyang/article/details/52317240

链接有详细解释,也有例子,以下是个人参照例子实验的代码。

package gui;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField; /**
* swing实现计算器功能
* @author 乔成强
* @version 创建时间:2018年5月11日 下午5:43:35
*/
public class GuiDemo extends JFrame implements ActionListener{ private static final long serialVersionUID = 2499964079704437558L; private JTextField result; // 显示运算结果的文本框
private JButton[] buttons; // 所有的按钮对象
private final String[] characters = { "7", "8", "9", "/", "4", "5", "6",
"*", "1", "2", "3", "-", "0", ".", "=", "+" }; // 所有的按钮文本
private boolean isFirstDigit = true; // 标记第一次输入数字
private String operator = "="; // 运算符
private double resultNum = 0.0; // 运算结果 public GuiDemo(String title) { //构造器 这里记得修改为自己编写的类
// 标题栏
super(title);
// 大小
setSize(220, 200);
// 居中
setLocationRelativeTo(null);
// 默认关闭操作
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 禁止修改大小
setResizable(false);
// 初始化文本框与按钮
generateInterface();
// 显示
setVisible(true);
} public static void main(String [] args){
GuiDemo gd = new GuiDemo("计算器");
}
/**
* 初始化文本框与按钮,生成界面
*/
private void generateInterface() {
/* 文本框 */
result = new JTextField("0");
// 右对齐
result.setHorizontalAlignment(JTextField.RIGHT);
// 不允许编辑
result.setEditable(false);
// 将文本框添加到窗体北方
add(result, BorderLayout.NORTH); /* 按钮 */
buttons = new JButton[characters.length];
JPanel pnl = new JPanel(new GridLayout(4, 4, 5, 5));
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton(characters[i]);
buttons[i].addActionListener(this);
buttons[i].setFocusable(false); // 不允许按钮定位焦点
pnl.add(buttons[i]);
}
// 将所有按钮添加到窗体的中间
add(pnl, BorderLayout.CENTER); // 允许内容面板定位焦点
this.getContentPane().setFocusable(true); // 注册内容面板事件监听器
// 使用适配器实现
this.getContentPane().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
char ch = e.getKeyChar(); // 获取按钮字符
/* 处理数字或运算符 */
if ('.' == ch || Character.isDigit(ch)) { // 数字小数点
handleNumber(String.valueOf(ch));
} else if ("+-*/=".indexOf(ch) != -1 || e.getKeyCode() == 10) { // 运算符
handleOperator(String.valueOf(ch));
} else if (e.getKeyCode() == 8) { // 退格键
String tmp = result.getText();
if (tmp.length() == 1) {
result.setText("0");
isFirstDigit = true;
} else {
result.setText(tmp.substring(0, tmp.length() - 1));
}
}
}
});
} @Override
public void actionPerformed(ActionEvent e) {
// 获取点击按钮的文本
String text = e.getActionCommand(); /* 处理数字或运算符 */
if (".".equals(text) || Character.isDigit(text.charAt(0))) { // 数字小数点
handleNumber(text);
} else if ("+-*/=".indexOf(text) != -1) { // 运算符
handleOperator(text);
}
} /**
* 处理数字与小数点
*
* @param text
*/
private void handleNumber(String text) {
if (isFirstDigit) { // 第一次输入
if (".".equals(text)) {
this.result.setText("0.");
} else {
this.result.setText(text);
}
} else if ("0".equals(text) && "0".equals(this.result.getText())) { // 输入0
isFirstDigit = true;
return;
} else if (".".equals(text) && this.result.getText().indexOf(".") == -1) { // 输入小数点
this.result.setText(this.result.getText() + ".");
} else if (!".".equals(text)) { // 输入不为小数点
this.result.setText(this.result.getText() + text);
}
// 修改第一次输入标记
isFirstDigit = false;
} /**
* 处理运算符
*
* @param text
*/
private void handleOperator(String text) {
/* 进行算术运算判断 */
switch (operator) {
case "+":
resultNum += Double.parseDouble(this.result.getText());
break;
case "-":
resultNum -= Double.parseDouble(this.result.getText());
break;
case "*":
resultNum *= Double.parseDouble(this.result.getText());
break;
case "/":
resultNum /= Double.parseDouble(this.result.getText());
break;
case "=":
resultNum = Double.parseDouble(this.result.getText());
break;
}
// 将运算结果显示到文本框中
this.result.setText(String.valueOf(resultNum));
// 将参数运算符放入成员变量中
this.operator = text;
// 下一个数字是第一次输入
isFirstDigit = true;
} }

java基础学习——Swing图形化用户界面编程的更多相关文章

  1. 黑马程序员:Java基础总结----GUI图形化界面

    黑马程序员:Java基础总结 GUI图形化界面   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流!   GUI(Graphical User Interface)图形化界 ...

  2. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  3. java 基础-思维导图

    思维导图的好处 最近看了一些文章的思维导图,发现思维导图真是个强大的工具.了解了思维导图的作用之后,觉得把它运用到java上应该是个不错的想法,这样回顾知识点的时候一目了然,快速知道自己的短板. 思维 ...

  4. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  5. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  6. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  7. 转载-java基础学习汇总

    共2页: 1 2 下一页  Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3     Java基础学习总结——Java对象的序列化和 ...

  8. Java基础-面向接口(interface)编程

    Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...

  9. java基础学习总结——java环境变量配置(转)

    只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...

随机推荐

  1. Docker -- 日志

    docker 的两总日志 引擎日志 容器日志 引擎日志 简介: Docker 引擎日志就是 dockerd 运行时的日志 在CentOS 7系统中,Docker 引擎日志一般是交给 systemd来管 ...

  2. Flink-v1.12官方网站翻译-P005-Learn Flink: Hands-on Training

    学习Flink:实践培训 本次培训的目标和范围 本培训介绍了Apache Flink,包括足够的内容让你开始编写可扩展的流式ETL,分析和事件驱动的应用程序,同时省略了很多(最终重要的)细节.本书的重 ...

  3. docker(9)Dockerfile制作镜像

    前言 如果我们已经安装了一个python3的环境,如果另一台机器也需要安装同样的环境又要敲一遍,很麻烦,这里可以配置Dockerfile文件,让其自动安装,类似shell脚本 Dockerfile编写 ...

  4. The Department of Redundancy Department

    Write a program that will remove all duplicates from a sequence of integers and print the list of un ...

  5. 阅读笔记:Item-based Collaborative Filtering Recommendation Algorithms

    概要: 推荐系统通过信息获取技术解决在线的个人的消息.产品或者服务的推荐问题.这些系统,特别是基于k临近协同过滤算法,在网络上取得了广泛的成功.可用信息和访问人数的巨大增加成了推荐系统一个难题.基于商 ...

  6. HDU6191 Query on A Tre【dsu on tree + 01字典树】

    Query on A Tree Problem Description Monkey A lives on a tree, he always plays on this tree. One day, ...

  7. Educational Codeforces Round 88 (Rated for Div. 2) D. Yet Another Yet Another Task(枚举/最大连续子序列)

    题目链接:https://codeforces.com/contest/1359/problem/D 题意 有一个大小为 $n$ 的数组,可以选取一段连续区间去掉其中的最大值求和,问求和的最大值为多少 ...

  8. Codeforces Round #696 (Div. 2) D. Cleaning (思维,前缀和)

    题意:有一堆石子,你每次可以选择相邻(就算两堆石子中间有很多空堆也不算)的两堆石子,使得两堆石子的个数同时\(-1\),你在刚开始的时候有一次交换相邻石子的机会,问你最后能否拿走所有石子. 题解:对于 ...

  9. String的20个方法

    String的20个方法 面试题 1.new和不new的区别 String A="OK"; String B="OK";//会去常量池查找有没有"Ok ...

  10. 操作系统:Linux进程与线程

    这里是一部分内容,还会做修改. 一:目的及内容 学习fork(),exec,pthread库函数的使用,阅读源码,分析fork,exec,pthread_create函数的机理 代码实现: 进程A创建 ...