原文链接: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. java调用shell脚本执行操作

    //定时清空 日志 String shellString = "sh /home/jyapp/delete_log.sh"; Process process = Runtime.g ...

  2. 小白搭建WAMP详细教程---apache、mysql、php的整合配置

    Apache与PHP整合 我们之前说过PHP能够解析PHP代码, 可是不服务于apache,apache能够获取接收浏览器的请求, 可是不能处理PHP代码, 要实现动态站点开发,就必须结合apache ...

  3. Java安全之jar包调试技巧

    Java安全之jar包调试技巧 调试程序 首先还是创建一个工程,将jar包导入进来 调试模式的参数 启动中需要加入特定参数才能使用debug模式,并且需要开放调试端口 JDK5-8: -agentli ...

  4. Inceptor [Code: 40000, SQL State: 42000] COMPILE FAILED: Internal error NullPointerException: [Error 40000] java.lang.NullPointerException

    下面代码报空指针 with `__all_dim__` as ( select * from ( select from_unixtime(unix_timestamp(`__bts__`) -1,' ...

  5. HDU 3449 依赖背包

    这道题虽然水水的,但是还是成功地给我增加了10多个WA. 最开始拿着题,一看,依赖背包嘛~直接DFS树形DP嗨起来,甚至连内存都没有算一下,3MLE: 然后又仔细看了一下题,没有必要用树形背包来做嘛, ...

  6. Codeforces Round #481 (Div. 3) G. Petya's Exams (贪心,模拟)

    题意:你有\(n\)天的时间,这段时间中你有\(m\)长考试,\(s\)表示宣布考试的日期,\(d\)表示考试的时间,\(c\)表示需要准备时间,如果你不能准备好所有考试,输出\(-1\),否则输出你 ...

  7. C# 之 async / await

    直接看一个例子 private async void button1_Click(object sender, EventArgs e) { var t = Task.Run(() => { T ...

  8. windows下进程间通信方法

    摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求.编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的.Microsof ...

  9. PowerShell启用多跳远程控制

    有些场景下,我们使用远程连接了某个Server,在远程Server中再想进行远程操作,就会提示错误.因为默认的认证信息只会传递一跳. 对此,微软官方文档给出的解决方案是:https://docs.mi ...

  10. kafka消息队列、环境搭建与使用(.net framework)

    一:kafka介绍 kafka(官网地址:http://kafka.apache.org)是一种高吞吐量的分布式发布订阅的消息队列系统,具有高性能和高吞吐率. 1.1 术语介绍 BrokerKafka ...