编辑一个简单计算机界面并响应(java)
2023-09-11 14:20:19 时间
编辑一个简单计算机界面并响应(java)
编前需知:在JFrame窗口顶部,我们需要一个文本域,在文本域的右边有一个清除按钮,我们可以把他放入一个JPanel里面,它的默认布局方式是流式布局。JFrame南部是网格状的布局,所以使用网格布局即可,在往里面添加按钮即可,并且附上标签(1,2,3,4,,,,等)这是大致的,其他的为按钮加上监听器并实现监听即可。值得注意的是,为方便,再此定义了一个常量类,Const,从Const里面调用对象。
测试代码:
1.常量类:
package cn.lidan.util;
import java.awt.*;
//常量类
public class Const {
//窗口的宽度和高度
public static final int FRAME_W=600;
public static final int FRAME_H=600;
//屏幕的宽度和高度
public static final int SCREEN_W= Toolkit.getDefaultToolkit().getScreenSize().width;
public static final int SCREEN_H=Toolkit.getDefaultToolkit().getScreenSize().height;
//中心点,使得窗口居中
public static final int FRAME_X=(SCREEN_W-FRAME_W)/2;
public static final int FRAME_Y=(SCREEN_H-FRAME_H)/2;
public static final String Title="杨氏计算机";
}
2.主函数:
package cn.lidan.start;
import cn.lidan.util.Const;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame implements ActionListener {
//北面的控件
private JPanel jp_north=new JPanel();
private JTextField textField =new JTextField();//文本域
private JButton c_Btn=new JButton("C");//清除按钮
//中心区域的控件
private JPanel jp_Center=new JPanel();
public Calculator()throws HeadlessException{
this.init();
this.addNorthComponent();
this.addCenterButton();
}
//初始化的方法 从常量类里面得到值
public void init(){
this.setTitle(Const.Title);
this.setSize(Const.FRAME_W,Const.FRAME_H);//屏幕的大小
this.setLayout(new BorderLayout());
this.setResizable(false);//屏幕不能放大
this.setLocation(Const.FRAME_X,Const.FRAME_Y);//是窗口出现在中间
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出
}
//北面的控件
public void addNorthComponent(){
this.textField.setPreferredSize(new Dimension(460,60));//文本域的大小
textField.setFont(new Font("粗体",Font.BOLD,26));//设置文本域里面输入数字或符号的大小
// 使用的是JPanel的默认布局,流式布局
jp_north.add(textField);
c_Btn.setFont(new Font("粗体",Font.BOLD,26));//设置清除按钮C的大小
this.c_Btn.setForeground(Color.red);
jp_north.add(c_Btn);
//为清除创建一个监听并实现监听
c_Btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textField.setText("");//给文本域变为空
}
});
this.add(jp_north,BorderLayout.NORTH);
}
//添加中心的控件
public void addCenterButton(){
String btn_text="123+456-789*0.=/";
String regex="[\\+\\-*/.=]";
//网格布局
this.jp_Center.setLayout(new GridLayout(4,4));
for(int i=0;i<16;i++){
//截取字符串
String temp=btn_text.substring(i,i+1);
JButton btn=new JButton();
//将字符串赋值给按钮
btn.setText(temp);
if(temp.matches(regex)){//匹配:+ - * / .
//如果是加减乘除点,就变为红色
btn.setForeground(Color.red);
}
// if(temp.equals("+")||temp.equals("=")||temp.equals("-")||temp.equals("*")||temp.equals("/")||temp.equals(".")){
// btn.setForeground(Color.red);
// }
btn.setFont(new Font("粗体",Font.BOLD,26));
//给按钮创建监听
btn.addActionListener(this);
jp_Center.add(btn);
}
this.add(jp_Center,BorderLayout.CENTER);
}
//主函数
public static void main(String[] args) {
Calculator calculator=new Calculator();
calculator.setVisible(true);
}
//数字处理区域,实现按钮的监听
//输入的第一个数字
private String firstInput=null;
//符号
private String operator =null;
@Override
public void actionPerformed(ActionEvent e) {
//表示点击的标签
String clickStr=e.getActionCommand();
// indexOf(String str): 返回指定字符str在字符串中(方法调用者)第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。
if(".0123456789".indexOf(clickStr)!=-1){
this.textField.setText(textField.getText()+clickStr);
//给文本域设置右对齐方式
this.textField.setHorizontalAlignment(JTextField.RIGHT);
}else if(clickStr.matches("[\\+\\-*/]{1}")){
operator =clickStr;
firstInput=this.textField.getText();
this.textField.setText("");
}else if(clickStr.equals("=")){
//将字符串转换为双精度浮点型数据
Double a=Double.valueOf(firstInput);
Double b=Double.valueOf(this.textField.getText());
Double result=null;
switch (operator){
case "+":
result=a+b;
break;
case "-":
result=a-b;
break;
case "*":
result=a*b;
break;
case "/":
if(b!=0){
result=a/b;
}
break;
}
//将结果打印在文本域中
this.textField.setText(result.toString());
}
}
}
运行结果:
给出了一个超链接,简单的演示了计算的过程,大家可以点击观看一下:
简单计算机响应演示视频
相关文章
- Java 开发环境配置--eclipse工具进行java开发
- java基础知识回顾之javaIO类---FileWriter和FileReader
- Java反射异常:java.lang.NoSuchFieldException
- Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列
- Java实现 LeetCode 57 插入区间
- Java实现第十届蓝桥杯人物相关性分析
- Java实现 蓝桥杯 历届试题 翻硬币
- java 文件的编码 问题
- java 面试题 -- 线程 按序 交替
- java数组-顺序插入数据及二分法查找数据
- linux系统部署Java程序获取ip时报Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- Java java.util.concurrent.Future的一个例子
- Java AOP研究之how is my aop2 method called
- hbase学习(一)hbase单机部署和java客户端连接单机hbase
- Atitit Java制作VCARD vcf 以上就是关于vCard的基本介绍,维基百科(英文)https://en.wikipedia.org/wiki/VCard写的比较全,可惜我看不懂。
- Java — java.lang.NullPointerException - 如何处理空指针异常
- Java 9 vs Java 8:引入模块化和JShell的全面升级
- JAVA编程:java环境安装和helloworld
- JAVA运行程序代码段
- JAVA语言之Java 中不同的并行实现的性能比较
- java.lang.OutOfMemoryError: Java heap space
- 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )
- JAVA开发讲义(二)-Java程序设计之数据之谜二