【实验七】界面化和事件处理

news2024/10/5 13:01:00

1、完成书上239页实验题目1和题目2

题目1

package chap10.test;
//awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类。
import java.awt.BorderLayout;//边界管理器

import java.awt.Color;
import java.awt.FlowLayout;//流布局一般用来安排面板中的按钮。它使得按钮呈水平放置,直到同一条线上再也没有适合的按钮。
import java.awt.Font;//	Font 类表示字体,可以使用它以可见方式呈现文本。
import java.awt.GridLayout;//灵活的布局管理器,它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。
import java.awt.event.ActionEvent;//当特定于组件的动作(比如被按下)发生时,由组件(比如 Button)生成此高级别事件。
import java.awt.event.ActionListener;//ActionListener动作事件监听器,当你在点击按钮时希望可以实现一个操作就得用到该接口了

import javax.swing.JButton;//按钮
import javax.swing.JFrame;//一个普通的窗口
import javax.swing.JPanel;//一般轻量级面板容器组件
import javax.swing.JTextField;//文本框

public class Calculation {
	//将窗口中需要控制的组件定义为属性	
	private JFrame jf;
	private JTextField field;
	private JButton[] allButtons;//所有按钮

	//在构造方法中创建组件
	public Calculation(){
		jf = new JFrame("Swing计算器");
		field = new JTextField(20);//文本框大小
		field.setText("0");//修改 Field 内容
		field.setHorizontalAlignment(JTextField.RIGHT);	//文本框内容右对齐
		allButtons = new JButton[20];//所有按钮一共20个
		String str="←C√±789/456*123-0.=+";//按钮有哪些
		for(int i=0; i<str.length(); i++){
			allButtons[i]=new JButton(str.substring(i,i+1));
		}//排入窗口
	}
	
	//初始化窗口,设置布局
	public void init(){ 	
		JPanel northPanel = new JPanel();//对象实列化吗,创建内存
		northPanel.setLayout(new FlowLayout());//设置布局
		JPanel centerPanel = new JPanel();
		GridLayout grid = new GridLayout(5,4,2,2);//45行4列,小组件之间的距离为2
		centerPanel.setLayout(grid);//设置		
		northPanel.add(field);//添加
		
		for(int i=0; i<allButtons.length; i++){
			centerPanel.add(allButtons[i]);//前面按键的大小循环规定
		}
		
		jf.add(northPanel,BorderLayout.NORTH);
		jf.add(centerPanel,BorderLayout.CENTER);	//将创建的组件放入	
	}
	
	//设置字体和颜色
	public void SetFontAndColor(){
		Font f_text = new Font("Times New Roman",Font.BOLD,16);
		Font f_button = new Font("Batang",Font.BOLD,16);//字体样式,加粗和大小		
		field.setFont(f_text);
		for(int i=0; i<allButtons.length; i++){
			allButtons[i].setFont(f_button);
			allButtons[i].setBackground(Color.WHITE);
			allButtons[i].setForeground(Color.darkGray);			
		}
	}
	
	public void show(){//输出时的样式
		init();
		SetFontAndColor();
		addEventHandler();
		
		jf.pack();
		jf.setLocation(300,200);
		jf.setResizable(false);
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//调用包里自带的函数	
	}
	
	public static void main(String[] args){//主函数
		new Calculation().show();
	}//全局静态

	public void addEventHandler(){  //添加监听
		for(int i=0; i<allButtons.length; i++){ //按钮区监听
			allButtons[i].addActionListener(new CalculateActionHandler());
		}		
	}
	//全局初值,只被赋值一次
	double op1=0, op2=0;//64位来存储浮点数
	String  operator="",pre_operator="";
	boolean flag = true;//下面循环的进入
	private class CalculateActionHandler implements ActionListener{	//接口
		public void actionPerformed(ActionEvent e) {	//方法重写	
			String command = e.getActionCommand();  //按钮上的文本
			if(command.equalsIgnoreCase("c")){
				field.setText(null);//清除
			}
			else if(command.equals("←"))
			{//退格
				String text = field.getText();//获取添加类容
				if(text.length()==0){ //已空
					return;
				}else if(text.length()==2 && text.substring(0,1).equals("-")){//清空后长度为1且只剩负号
					field.setText(null);
				}else{
					field.setText(text.substring(0, text.length()-1));
				}
			}
			else if("0123456789.".indexOf(command)!=-1){	//数字按钮或小数点按钮
				if( field.getText().indexOf(".")!=-1 && command.equals(".") ){ //出现多个小数点的情况
					return;  //忽略多输入的小数点
				}
				if(field.getText().length()==1 && field.getText().equals("0")){//开头是0
					field.setText(null);
				}
				if(flag){
					field.setText(command);
				}else{
					field.setText(field.getText()+command);			
				}
				flag=false;//结束循环
			}else if("+-*/".indexOf(command)!=-1){	//运算符号按钮			
				//取文本框中的数据
				pre_operator = field.getText();
				op1 = Double.valueOf(field.getText());
				
				//记下符号				
				operator= command;
	
				//清空文本框
				field.setText(null);						
			}else if(command.equalsIgnoreCase("="))	
			{//等号
				//取当前文本框中的数据
				double res = 0;//参数
				String text =field.getText();//获取类容
				if(text.length()>0){
					op2 = Double.valueOf(text);
					if (operator.equals("+")){
						 res = op1 + op2;  
					}else if(operator.equals("-")){
						res = op1 - op2; 
					}else if (operator.equals("*")){
						 res = op1 * op2; 
					}else {
						res = op1 / op2; 
					}
					
					if(text.indexOf(".")!=-1 || pre_operator.indexOf(".")!=-1 || operator.equals("/") )//小数
					// indexof返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
					{
						field.setText(String.valueOf(res));		
					}else{//两个都是整数
						field.setText(String.valueOf((int)res));		
					}	
				}
				flag=true;
			}else if(command.equals("√")){//开方
				String text =field.getText();
				if(text.length()>0){
					op2 = Double.valueOf(text);
					if(op2>0){
						field.setText(String.valueOf(Math.sqrt(op2)));					
					}else{
						field.setText("无效输入");
					}
					flag=true;
				}
			}else if(command.equals("±")){ //负号
				String text =field.getText();
				if(text.length()>0){
					op2 = -Double.valueOf(text);
					if(text.indexOf(".")!=-1){					
						field.setText(String.valueOf(op2));
					}else{
						field.setText(String.valueOf((int)op2));
					}	
					flag=true;
				}
			}
		}	
	}
}

题目2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/741028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Django_自定义文件存储类并将图片上传到FastDFS

目录 将图片到FastDFS和浏览的流程图 使用自定义文件存储类 1、定义存储类 2、创建FastDFS的配置文件 3、修改settings.py配置 4、上传图片进行验证 4.1 定义一个包含ImageField字段的模型类 4.2 登录django的admin后台 4.3 上传图片 4.4 查看图片 源码等资料获取方…

What Is the Character Limit for ChatGPT? 聊天GPT的字符限制是多少?

The character limit for ChatGPT text prompts is 4096 characters, and there’s also a limit of 4096 tokens per conversation. If you aren’t sure how many tokens your prompt uses, you can calculate that with OpenAI’s Tokenizer tool. ChatGPT 文本提示的字符限…

AutoHand第三人称的AutoHandVRIK开启和关闭

第三人称结构 第三人称在AutoHandVRIK脚本初始化完毕后&#xff0c;会出把两只手提到玩家对象根部对象上&#xff0c;并且在原始的模型手的位置创建了新的对象&#xff08;leftHandFollowTarget&#xff0c;rightHandFollowTarget&#xff09;&#xff0c;副VRIK大概用途就是I…

从字母百分比看字符串处理的奥妙

本篇博客会讲解力扣“2278. 字母在字符串中的百分比”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff0c;统计字符letter在字符串s中出现的次数cnt&#xff0c;以及字符串s的长度n&#xff0c;其中n也可以使用strlen来求。最终要求计算的百分比是cnt*100/n。 int…

性能测试工具LoadRunne函数如何使用详解(上)

性能测试工具LoadRunner是软件测试行业主流测试工具&#xff0c;也是软件测试实验室在申请CNAS/CMA资质、测试质量体系建设一定会用到的一款软件测试工具。LoadRunner的函数是是组成测试脚本的最小单元&#xff0c;它真实模拟 一个个请求操作&#xff0c;并接收返回结果。学习L…

王道考研数据结构——顺序表

08 线性表的基本概念 对参数的修改结果需要“带回来”就使用引用类型的参数 顺序表的定义&#xff1a; 顺序存储、链式存储 sizeof(int)、sizeof(MyStruct) 顺序表的扩展 虽然大小改变&#xff0c;但是时间开销大 让代码健壮&#xff1a;对数据操作的合法性进行检查&#xf…

How to Write and Publish a Scientific Paper-How to Prepare Effective Graphs

How to Prepare Effective Graphs WHEN NOT TO USE GRAPHS 在上一章中&#xff0c;我们讨论了某些不应该制成表格的数据类型。它们也不应该被转换成图表。基本上&#xff0c;图表都是图形表格。 要点是这样的。某些类型的数据&#xff0c;特别是稀疏类型或单调重复的类型&am…

细节决定成败,聊聊JS的类型(下)

讲完了基本类型&#xff0c;我们来介绍一个现象&#xff1a;类型转换。 因为 JS 是弱类型语言&#xff0c;所以类型转换发生非常频繁&#xff0c;大部分我们熟悉的运算都会先进行类型转换。大部分类型转换符合人类的直觉&#xff0c;但是如果我们不去理解类型转换的严格定义&a…

牛客练习赛113

A小红的基环树 题目描述 定义基环树为n个节点、n条边的、没有自环和重边的无向连通图。 定义一个图的直径是任意两点最短路的最大值。 小红想知道&#xff0c;n个节点构成的所有基环树中&#xff0c;最小的直径是多少&#xff1f; 思路分析 特判n3时为1&#xff0c;其他时候都…

行业追踪,2023-07-11,新增加 rps50 排名,汽车零部件回落 10 日均线,直接反弹

自动复盘 2023-07-11 成交额超过 100 亿 排名靠前&#xff0c;macd柱由绿转红 成交量要大于均线 有必要给每个行业加一个上级的归类&#xff0c;这样更能体现主流方向 rps 有时候比较滞后&#xff0c;但不少是欲杨先抑&#xff0c; 应该持续跟踪&#xff0c;等 macd 反转时参与…

Stable Diffusion - 提示词翻译插件 sd-webui-prompt-all-in-one

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131649921 sd-webui-prompt-all-in-one 是一个基于 stable-diffusion-webui 的扩展&#xff0c;目的是提高 提示词/反向提示词 输入框的使用体验&…

汽车应用级MS35774/MS35774A低噪声 256 细分微步进电机驱动

MS35774/MS35774A 是一款高精度、低噪声的两相步进 电机驱动芯片&#xff0c;芯片内置功率MOSFET &#xff0c;长时间工作的平均电 流可以达到 1.4A &#xff0c;峰值电流 2A 。芯片集成了过温保护、欠压 保护、过流保护、短地保护、短电源保护功能。 主要特点 ◼ 2 相步进…

【python】Excel文件的插入操作

上篇文章写了pandas读取Excel文件的操作&#xff0c;但实际应用中&#xff0c;我们还需要对Excel指定单元格进行写入操作。 pandas模块写入 pandas模块方法写入&#xff0c;简单粗暴&#xff0c;就是把整个Excel文件重写 import pandas as pdfile_path 测试用例.xlsx # 读取Ex…

【Java基础】符号位、原码、补码、反码、位逻辑运算符、位移运算符、复合位赋值运算符

文章目录 前言&#xff1a;符号位、原码、补码、反码1.是什么2.各种码转换 一.二进制高低位1.1.什么是高低位1.2.高低位交换 二.位逻辑运算符位与运算 &位或运算 |异或运算 ^取反运算 ~ 三.位移运算符左位移运算符 <<右位移运算符 >>1.正数右移&#xff1a;2.负…

什么是QPS,什么是RT

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;什么是QPS&#xff0c;什么是RT ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加…

生产慢查询问题分析

1.问题描述 7月1日零点set_24出现大量慢查询告警&#xff0c;经DBA定位为子系统涉及的一条查询语句出现慢查询&#xff0c;引起set_24的cpu使用率突增&#xff0c;触发大量告警&#xff0c;查看生产执行计划发现慢查询为索引跳变引起&#xff1b;具体出现问题的sql语句如下&am…

【裸机开发】I2C 通信接口(三)—— I2C 底层驱动接口实现

目录 一、I2C 初始化 二、产生开始 / 停止信号 1、开始信号 2、重复开始信号 3、停止信号 三、向总线上发送数据&#xff08;阻塞模式&#xff09; 四、从总线上读取数据&#xff08;阻塞模式&#xff09; 五、整合&#xff1a;数据读写统一调用接口 一、I2C 初始化 初…

springboot驾校管理系统

框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 …

springboot+dynamic-datasource实现多数据源动态切换,非@DS注解方式

springbootdynamic-datasource实现多数据源动态切换&#xff0c;非注解 一、前言二、方案思路三、代码实现 一、前言 最近在分析SaaS平台多租户的功能&#xff0c;必然涉及数据库部分的功能&#xff0c;多租户的设计方案要考虑租户隔离数据和租户共享数据&#xff0c;共享数据…

concrt140.dll怎么修复?哪种修复方法更值得推荐

运行软件的时候&#xff0c;计算提示找不到concrt140.dll&#xff0c;第一次遇到的小伙伴肯定不知道是什么意思。concrt140.dll是Microsoft Visual C Redistributable for Visual Studio 2015的一部分。它是一个动态链接库文件&#xff0c;包含在Windows操作系统中。这个文件主…