zl程序教程

您现在的位置是:首页 >  后端

当前栏目

编辑一个简单计算机界面并响应(java)

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());
        }
    }
}

运行结果:

给出了一个超链接,简单的演示了计算的过程,大家可以点击观看一下:
简单计算机响应演示视频