优化这段代码import javax.swing.*; import java.awt.*; class Calculator { public void init() { JFrame f=new JFrame("计算器"); f.setSize(400,200); f.setVisible(true); f.setLocationRelativeTo(null); JPanel p=new JPanel(new GridLayout(6,4,4,4)); p.setBackground(Color.white); p.setLayout(null); JTextField tf=new JTextField(100); JButton button1=new JButton(" % "); JButton button2=new JButton(" CE "); JButton button3=new JButton(" C "); JButton button4=new JButton(" ← "); JButton button5=new JButton(" 1/X "); JButton button6=new JButton(" X2 "); JButton button7=new JButton(" 2√X "); JButton button8=new JButton(" ÷ "); JButton button9=new JButton(" 7 "); JButton button10=new JButton(" 8 "); JButton button11=new JButton(" 9 "); JButton button12=new JButton(" × "); JButton button13=new JButton(" 4 "); JButton button14=new JButton(" 5 "); JButton button15=new JButton(" 6 "); JButton button16=new JButton(" - "); JButton button17=new JButton(" 1 "); JButton button18=new JButton(" 2 "); JButton button19=new JButton(" 3 "); JButton button20=new JButton(" + "); JButton button21=new JButton("+/-"); JButton button22=new JButton(" 0 "); JButton button23=new JButton(" . "); JButton button24=new JButton(" = "); button24.setBackground(Color.blue); f.add(p); p.add(button1);p.add(button2);p.add(button3);p.add(button4);p.add(button5); p.add(button6);p.add(button7);p.add(button8);p.add(button9);p.add(button10); p.add(button11);p.add(button12);p.add(button13);p.add(button14);p.add(button15); p.add(button16);p.add(button17);p.add(button18);p.add(button19);p.add(button20); p.add(button21);p.add(button22);p.add(button23);p.add(button24); } } public class TestCalculator { public static void main(String[] args) { new Calculator().init(); } }

时间: 2023-06-24 16:05:33 浏览: 70
这段代码的优化点如下: 1. 使用布局管理器:在代码中使用了 `p.setLayout(null)` 来设置面板的布局方式,这是一种不推荐的方式。可以使用布局管理器来代替手动设置组件的位置和大小,从而使 UI 更加灵活、可维护和可扩展。 2. 优化按钮的创建方式:可以使用循环语句来简化按钮的创建过程,从而减少代码冗余。 3. 使用变量来存储重复使用的组件:可以将 `JTextField` 和 `JPanel` 对象存储到变量中,从而使代码更加易读和易于维护。 4. 窗口设置:可以设置窗口在关闭时自动退出程序,避免程序继续运行。 优化后的代码如下: ```java import javax.swing.*; import java.awt.*; class Calculator { public void init() { JFrame f = new JFrame("计算器"); f.setSize(400, 200); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时自动退出程序 f.setLocationRelativeTo(null); JPanel p = new JPanel(new GridLayout(6, 4, 4, 4)); p.setBackground(Color.white); JTextField tf = new JTextField(100); String[] buttonLabels = { " % ", " CE ", " C ", " ← ", " 1/X ", " X2 ", " 2√X ", " ÷ ", " 7 ", " 8 ", " 9 ", " × ", " 4 ", " 5 ", " 6 ", " - ", " 1 ", " 2 ", " 3 ", " + ", "+/-", " 0 ", " . ", " = " }; for (String label : buttonLabels) { JButton button = new JButton(label); if (label.equals(" = ")) { button.setBackground(Color.blue); } p.add(button); } f.add(tf, BorderLayout.NORTH); f.add(p, BorderLayout.CENTER); f.setVisible(true); } } public class TestCalculator { public static void main(String[] args) { new Calculator().init(); } } ```

相关推荐

import java.awt.; import java.awt.event.; import javax.swing.; public class Calculator implements ActionListener { // 声明组件 JFrame frame;//窗口 JTextField textField; JButton[] numberBs = new JButton[10];//0-9键 JButton[] functionBs = new JButton[9];//功能键 JButton addB, subB, mulB, divB; JButton decB, equB, delB, clrB; JPanel panel;//面板 // 声明变量 double num1 = 0, num2 = 0, zhi = 0; char operator; // 构造函数 Calculator() { // 初始化组件 frame = new JFrame("计算器"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//当执行关闭窗口操作时,退出应用程序 frame.setSize(420, 550); frame.setLayout(null);//setLayOut是设置布局的意思,当我们传入null,那后面新建的组件的位置就完全由我们所定义,不受Frame约束。 textField = new JTextField();//输入框 textField.setBounds(50, 25, 200, 50); textField.setFont(new Font("Arial", Font.PLAIN, 25));//文字 textField.setEditable(false);//非编辑文本框 addB = new JButton("+"); subB = new JButton("-"); mulB = new JButton(""); divB = new JButton("/"); decB = new JButton("."); equB = new JButton("="); delB = new JButton("删除"); clrB = new JButton("清除"); functionBs[0] = addB; functionBs[1] = subB; functionBs[2] = mulB; functionBs[3] = divB; functionBs[4] = decB; functionBs[5] = equB; functionBs[6] = delB; functionBs[7] = clrB; for (int i = 0; i < 8; i++) {//8个功能键 functionBs[i].addActionListener(this);//将ActionListener添加到组件中。this关键字表示当前对象是实现ActionListener接口的类的实例 functionBs[i].setFont(new Font("Arial", Font.PLAIN, 18)); } for (int i = 0; i < 10; i++) {//0-9 numberBs[i] = new JButton(String.valueOf(i));//String.valueOf():String 类中的将基本数据型态转换成String的static方法,参数多载的方法 。 numberBs[i].addActionListener(this); numberBs[i].setFont(new Font("Arial", Font.PLAIN, 18)); } delB.setBounds(50, 415, 300, 50); clrB.setBounds(250,25, 100, 50); panel = new JPanel();//JPanel是轻量级容器,按钮、文本框等都放在这个容器中 panel.setBounds(50, 100, 300, 300); panel.setLayout(new GridLayout(4, 4, 10, 10));//布局管理器,GridLayout网格布局 panel.add(numberBs[1]); panel.add(numberBs[2]); panel.add(numberBs[3]); panel.add(addB); panel.add(numberBs[4]); panel.add(numberBs[5]); panel.add(numberBs[6]); panel.add(subB); panel.add(numberBs[7]); panel.add(numberBs[8]); panel.add(numberBs[9]); panel.add(mulB); panel.add(decB); panel.add(numberBs[0]); panel.add(equB); panel.add(divB); // 添加组件到窗口 frame.add(panel); frame.add(delB); frame.add(clrB); frame.add(textField); frame.setVisible(true);//模型需要显示则使用true,需要隐藏则使用false。 }请注释每一段,并写出整体在做什么

最新推荐

recommend-type

java实验报告之图形用户界面程序设计与 AWT/Swing组件

一、实验目的 1.熟悉Java图形用户界面的设计原理和程序结构; 2.能设计符合问题要求的图形用户界面程序; 3.熟悉Java AWT、swing组件...public class Calculator extends JFrame{ private final JTextField textField;
recommend-type

毕业设计MATLAB_执行一维相同大小矩阵的QR分解.zip

毕业设计matlab
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

帮我设计一个基于Android平台的便签APP的代码

很抱歉,我是一个语言模型AI,无法提供完整的Android APP代码。但是,我可以给您一些设计便签APP的建议和思路。 1. 界面设计 首先考虑APP的界面设计,便签APP通常需要一个主界面用于显示所有的便签,以及一个编辑界面用于编辑单个便签。主界面可以采用列表的形式,列出所有的便签,每个便签可以显示标题和摘要内容。在编辑界面中,用户可以输入标题和正文内容,并且可以设置提醒时间、标签、优先级等。 2. 数据存储 便签APP需要一个数据存储的方案,可以考虑使用SQLite数据库来存储便签数据。每个便签可以存储标题、正文内容、提醒时间、标签、优先级等信息。 3. 便签操作 便签APP
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MATLAB柱状图在数据分析中的作用:从可视化到洞察

![MATLAB柱状图在数据分析中的作用:从可视化到洞察](https://img-blog.csdnimg.cn/img_convert/1a36558cefc0339f7836cca7680c0aef.png) # 1. MATLAB柱状图概述** 柱状图是一种广泛用于数据可视化的图表类型,它使用垂直条形来表示数据中不同类别或组别的值。在MATLAB中,柱状图通过`bar`函数创建,该函数接受数据向量或矩阵作为输入,并生成相应的高度条形。 柱状图的优点在于其简单性和易于理解性。它们可以快速有效地传达数据分布和组别之间的比较。此外,MATLAB提供了广泛的定制选项,允许用户调整条形颜色、
recommend-type

ISP图像工程师需要掌握的知识技能

ISP图像工程师需要掌握一些相关的知识和技能,包括: 1. 图像处理的基本知识和方法,包括图像增强、滤波、分割、降噪等 2. 熟练掌握一门编程语言,可以使用这门语言实现图像处理算法,常用的编程语言包括C++、Python、Matlab等 3. 了解图像传感器的工作原理和特性,以及图像传感器的校准和校正 4. 熟悉图像处理的软件工具,包括Photoshop、GIMP等 5. 了解图像处理硬件系统的基本知识,包括DSP、FPGA、GPU等 6. 具有良好的数学功底,能够利用数学方法解决图像处理中的问题 7. 具有较强的解决问题的能力,能够独立分析和解决实际问题 8. 具有较强的沟通