Java Swing计算器界面的实现

2023-05-16

在本节之前已经详细介绍了 Swing 中容器、布局管理器以及常用的基本组件。本案例将综合运用这些知识实现一个计算器的布局。在本实例中使用两种布局管理器来进行界面设计。

计算器界面可以分成两部分,即显示区和键盘区。显示区可以使用文本框组件,键盘区则是由很多按钮组成,可以使用网格布局管理器。详细的实现过程如下。

(1) 新建一个继承自 JFrame 的 CalculatorDemo 类。

(2) 为类添加构造方法和 main() 方法,主要代码如下所示。

  1. package ch17;
  2. import java.awt.BorderLayout;
  3. import java.awt.GridLayout;
  4. import javax.swing.JButton;
  5. import javax.swing.JFrame;
  6. import javax.swing.JPanel;
  7. import javax.swing.JTextField;
  8. import javax.swing.SwingConstants;
  9. import javax.swing.border.EmptyBorder;
  10. public class CalculatorDemo extends JFrame
  11. {
  12. private JPanel contentPane; //内容面板
  13. private JTextField textField; //文本框
  14. public CalculatorDemo(){}; //构造方法
  15. public static void main(String[] args)
  16. {
  17. CalculatorDemo frame=new CalculatorDemo();
  18. frame.setVisible(true);
  19. }
  20. }

(3) 在构造方法中设置窗口的标题和大小等属性,然后使用边界面板向北部添加一个 JTextField 组件,主要代码如下所示。

  1. public CalculatorDemo()
  2. {
  3. setTitle("计算器"); //设置窗体的标题
  4. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体退出时操作
  5. setBounds(100, 100, 250, 200); //设置窗体位置和大小
  6. contentPane=new JPanel(); //创建内容面板
  7. contentPane.setBorder(new EmptyBorder(5,5,5,5)); //设置面板的边框
  8. contentPane.setLayout(new BorderLayout(0,0)); //设置内容面板为边界布局
  9. setContentPane(contentPane); //应用内容面板
  10. JPanel panel1=new JPanel(); //新建面板用于保存文本框
  11. contentPane.add(panel1,BorderLayout.NORTH); //将面板放置在边界布局的北部
  12. textField=new JTextField(); //新建文本框
  13. textField.setHorizontalAlignment(SwingConstants.RIGHT); //文本框中的文本使用右对齐
  14. panel1.add(textField); //将文本框增加到面板中
  15. textField.setColumns(18); //设置文本框的列数是18
  16. }

(4) 接下来使用网格布局管理器添加多个按钮作为计算器的键盘区,主要代码如下所示。

  1. JPanel panel2=new JPanel(); //新建面板用于保存按钮
  2. contentPane.add(panel2, BorderLayout.CENTER); //将面板放置在边界布局的中央
  3. panel2.setLayout(new GridLayout(4,4,5,5)); //面板使用网格4X4布局
  4. JButton button01=new JButton("7"); //新建按钮
  5. panel2.add(button01); //应用按钮
  6. JButton button02=new JButton("8"); //新建按钮
  7. panel2.add(button02); //应用按钮
  8. JButton button03=new JButton("9"); //新建按钮
  9. panel2.add(button03); //应用按钮
  10. JButton button04=new JButton("+"); //新建按钮
  11. panel2.add(button04); //应用按钮
  12. JButton button05=new JButton("4"); //新建按钮
  13. panel2.add(button05); //应用按钮
  14. JButton button06=new JButton("5"); //新建按钮
  15. panel2.add(button06); //应用按钮
  16. JButton button07=new JButton("6"); //新建按钮
  17. panel2.add(button07); //应用按钮
  18. JButton button08=new JButton("-"); //新建按钮
  19. panel2.add(button08); //应用按钮
  20. JButton button09=new JButton("3"); //新建按钮
  21. panel2.add(button09); //应用按钮
  22. JButton button10=new JButton("2"); //新建按钮
  23. panel2.add(button10); //应用按钮
  24. JButton button11=new JButton("1"); //新建按钮
  25. panel2.add(button11); //应用按钮
  26. JButton button12=new JButton("*"); //新建按钮
  27. panel2.add(button12); //应用按钮
  28. JButton button13=new JButton("0"); //新建按钮
  29. panel2.add(button13); //应用按钮
  30. JButton button14=new JButton("."); //新建按钮
  31. panel2.add(button14); //应用按钮
  32. JButton button15=new JButton("="); //新建按钮
  33. panel2.add(button15); //应用按钮
  34. JButton button16=new JButton("/"); //新建按钮
  35. panel2.add(button16); //应用按钮

(5) 最终程序的运行效果如图 1 所示。


图1 计算器布局效果

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Swing计算器界面的实现 的相关文章

  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • 使用架构注册表对 avro 消息进行 Spring 云合约测试

    我正在查看 spring 文档和 spring github 我可以看到一些非常基本的内容examples https github com spring cloud samples spring cloud contract sample
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • Ubuntu 16.04安装chrome稳定版

    1 打开终端 xff08 Ctrl 43 Alt 43 T xff09 xff0c 输入以下命令 xff1a sudo wget https repo fdzh org chrome google chrome list P etc apt
  • 【建议收藏】保姆级教程 - 图解Windows10+优麒麟双系统安装

    为防止超速翻车 xff0c 建议通读全文后再进行操作 xff08 此处双系统以 Windows 10 43 优麒麟 20 04 LTS Pro 为例 xff0c 其他版本的系统仅供参考 xff09 01 安装前的准备 四小步 第一步 xff
  • Linux文件系统--文件类型

    Linux中一切都是文件 xff0c 文件类型有多种 xff0c 使用ls l命令可以查看文件属性 xff0c 所显示结果的第一列的第一个字符用来表示文件类型 xff0c 如下 xff1a 1 普通文件 第一列第一个字符为 的文件为普通文件
  • Windows Terminal 快速配置 oh-my-posh

    背景 想美化下windows terminal xff0c 选择了oh my posh 网上的文章有点多 xff0c 加上官方的教程对初次使用着并不是太友好 xff0c 所以自己快速摸索了 记录下过程 步骤 1 xff0c 安装oh my
  • SVN彻底删除某版本的方法

    如果出现了提交失误 xff0c 想从服务器端彻底删除某版本 xff0c 可以这么做 在服务器端的Repository RepoName db revs 0和 db revprops 0中删除对应的版本号 xff0c 此时再update会出现
  • ZEMAX | 使用点扩散函数的衍射极限成像系统的分辨率

    ZEMAX 使用点扩散函数的衍射极限成像系统的分辨率 成像系统 xff08 例如显微镜 xff09 的衍射极限分辨率可以通过不同方式表征 在本文中 xff0c 我建议使用在 OpticStudio 中计算的点扩散函数 PSF 来客观衡量这些
  • 荐书 | 从启蒙到进阶,值得推荐的五本少儿编程

    据小木对身边的人了解 xff0c 好像码农们都有这么一个愿望 xff1a 等我有孩子了 xff0c 我一定教我的孩子学编程 玩游戏玩自己设计的才酷 xff01 看着一个个码农爸爸憧憬着美好的愿景 xff0c 小木恨不得马上帮他们实现这个愿望
  • 在浏览器中输入一个网址后,发生了什么?

    此文章转载自 xff1a https www cnblogs com SarahLiu p 5954832 html 这是面试中一道非常经典的问题 当你在浏览器中输入一个网址 xff0c 浏览器的处理过程如下 xff1a 第一步 浏览器查找
  • Banner基本使用 2.1.0

    Step 1 依赖banner Gradle dependencies compile 39 com youth banner banner 2 1 0 39 Step 2 添加权限到你的 AndroidManifest xml lt if
  • eclipse控制台变动难调整

  • 苹果cms详细安装方法

    做影视网站的站长对苹果cms是相当熟悉的 xff0c 毕竟这套系统实在太好用了 xff0c 使它一直火到了今天 xff01 今天小编就带着刚接触到本套程序的大家用它来搭建一次影视视频网站 xff01 程序运行环境 Apache 43 PHP
  • MySQL的版本以及版本号

    针对不同的用户 xff0c MySQL 分为两个版本 xff1a MySQL Community Server xff08 社区版 xff09 xff1a 该版本完全免费 xff0c 但是官方不提供技术支持 MySQL Enterprise
  • MySQL配置教程(图解版)

    配置 MySQL 数据库有两种比较常见的方式 xff0c 分别是使用配置向导和手动更改 xff0c 下面我们来分别介绍一下这两种方式 使用配置向导 步骤 1 xff1a MySQL 安装完成之后 xff0c 进行配置信息的确认 xff0c
  • MySQL常用运算符详解

    MySQL 数据库中的表结构确立后 xff0c 表中的数据代表的意义就已经确定 而通过 MySQL 运算符进行运算 xff0c 就可以获取到表结构以外的另一种数据 例如 xff0c 学生表中存在一个 birth 字段 xff0c 这个字段表
  • Java 文档注释

    Java 支持三种注释方式 前两种分别是 和 xff0c 第三种被称作说明注释 xff0c 它以 开始 xff0c 以 结束 说明注释允许你在程序中嵌入关于程序的信息 你可以使用 javadoc 工具软件来生成信息 xff0c 并输出到HT
  • JSP开发环境搭建(Tomcat的安装和配置)

    使用 JSP 开发程序 xff0c 需要具备对应的运行环境 xff1a Web 浏览器 Web 服务器 JDK 开发工具包 数据库 xff08 MySQL SQL Server 等 xff09 下面以 Windows 操作系统为平台介绍 J
  • JS字符串替换(使用replace()方法)

    replace 方法的第二个参数可以使用函数 xff0c 当匹配时会调用该函数 xff0c 函数的返回值将作为替换文本使用 xff0c 同时函数可以接收以 为前缀的特殊字符 xff0c 用来引用匹配文本的相关信息 约定字符串说明 1 2 9
  • Spring Boot项目搭建步骤(超详细)

    在 Spring Tools 4 for Eclipse 中依次选择 File gt New gt Maven Project xff0c 然后在出现的界面中按图 1 所示增加相关信息 图 1 创建 maven 项目 完了上述操作之后 xf
  • Java Swing JRadioButton:单选按钮组件

    单选按钮与复选框类似都有两种状态 xff0c 不同的是一组单选按钮中只能有一个处于选中状态 Swing 中 JRadioButton 类实现单选按钮 xff0c 它与 JCheckBox 一样都是从 JToggleButton 类派生出来的
  • Java Swing计算器界面的实现

    在本节之前已经详细介绍了 Swing 中容器 布局管理器以及常用的基本组件 本案例将综合运用这些知识实现一个计算器的布局 在本实例中使用两种布局管理器来进行界面设计 计算器界面可以分成两部分 xff0c 即显示区和键盘区 显示区可以使用文本