Java GUI 实现的计算器

Java GUI 实现的计算器


前言

0.如何设置布局管理器
1.边界布局管理器BorderLayout
2.网格布局管理器GridLayout
3.String类
4.类的继承
5.java事件监听器
6.基于eclipse


提示:以下是本篇文章正文内容,下面案例可供参考

一、实现一个空白窗口

import javax.swing.JFrame;

public class Computer {

	public static void main(String[] args) {
		JFrame frame = new JFrame("我的计算器");//创建一个窗口
		frame.setSize(300,300);//设置窗口的大小
		frame.setLocationRelativeTo(null);//设置窗口居中
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口每次关闭后程序结束
		frame.setVisible(true);//设置窗口的可视化

	}

}

二、实现计算器界面

在这里插入图片描述

1.重新定义一个类来写主要功能

用构造方法来实现类的调用

public class ComputerFace {
	public static void main(String[] args) {
		new Computer();//在main方法调用构造方法
	}
public class Computer {

	public Computer(){//构造方法方法名必须与类名一样
		JFrame frame = new JFrame("我的计算器");//创建一个窗口
		frame.setSize(300,300);//设置窗口的大小
		frame.setLocationRelativeTo(null);//设置窗口居中
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口每次关闭后程序结束
		frame.setVisible(true);//设置窗口的可视化

2.将组件添加到窗口中

窗口默认边界布局管理器BorderLayout
添加组件到窗口的方式

frame.add(组件,布局管理器);

将文本框添加到窗口

JTextField text =new JTextField();//创建文本框的对象text
frame.add(text,BorderLayout.NORTH);//将文本框添加到窗口的北部

创建JPanel面板
将其设置为网格布局管理器
再添加到窗口中间

JPanel center = new JPanel();//创建面板对象center
center.setLayout(new GridLayout(4,4));//将面板设置为网格布局
JButton[] btns =new JButton[16];//创建按钮字符串数组对象
String lables[]= {"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};//用lables标签保存按钮上的字符
for (int i = 0; i < btns.length; i++) {//用for循环遍历按钮数组
    btns[i]=new JButton(lables[i]);//将lables数组传进按钮数组
	center.add(btns[i]);//将按钮数组添加到面板center
}
	frame.add(center,BorderLayout.CENTER);//把center设置在窗口的中间

添加一个删除按钮以实现每次运算完清空文本框的内容

JButton delete = new JButton("删除");//创建一个删除按钮的对象
frame.add(delete,BorderLayout.SOUTH);//将删除按钮添加到窗口的南部

最后的实现效果
在这里插入图片描述
完整的代码

public class ComputerFace {
	public static void main(String[] args) {
		new Computer();//在main方法调用构造方法
	}
package computerPractice;

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Computer {
	// 放在方法的前面方便后面的调用
	JFrame frame = new JFrame("我的计算器");// 创建一个窗口
	JTextField text = new JTextField();
	JButton[] btns = new JButton[16];
	JButton delete = new JButton("删除");
    public Computerpractice() {

		JPanel center = new JPanel();// 创建面板对象center
		center.setLayout(new GridLayout(4, 4));// 将面板设置为网格布局
		
		String lables[] = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+" };// 用lables标签保存按钮上的字符
		for (int i = 0; i < btns.length; i++) {// 用for循环遍历按钮数组

			btns[i] = new JButton(lables[i]);// 将lables数组传进按钮数组
			center.add(btns[i]);// 将按钮数组添加到面板center

		}

		frame.add(delete, BorderLayout.SOUTH);
		frame.add(text, BorderLayout.NORTH);
		frame.add(center, BorderLayout.CENTER);// 把center设置在窗口的中间

		frame.setSize(300, 300);// 设置窗口的大小
		frame.setLocationRelativeTo(null);// 设置窗口居中
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗口每次关闭后程序结束
		frame.setVisible(true);// 设置窗口的可视化

	}

}

4.类的继承

1.class computer extends JFrame{}
2.父类包含没有实现体的抽象方法-------“接口”
class computer implements ActionListener{
给出父接口中所有抽象的实现体
}
需要写一个监听器的类
1)监听到事件的发生
2)捕获这个事件对象
3)把事件对象通过响应方法的参数传递给我(我通过这个传来的事件对象获得事件的细节)
怎样写一个我自己的类computer,让他有另一个类 ActionListener的功能方法:
a.实现某种监听器的接口
b.给出父类接口中所有抽象方法的实现体

public class Computer implements ActionListener {

Computer有红色的下划线,鼠标移动过去点击未实现的方法,将自动添加未实现的方法

@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}

给组件添加监听器

delete.addActionListener(frame);
btns[i].addActionListener(frame);

5.关于计算功能的实现

在前面定义两个变量

    StringBuilder inputStr=new StringBuilder();//保存字符串
    String op=" ";//定义一个变量保存运算符

计算功能的实现完整代码

public void actionPerformed(ActionEvent e) {
	    String s = e.getActionCommand(); // 获得按钮上的标签
	    if (s.equals("删除")) {
	        inputStr.setLength(0); // 清空字符串
	    } else {
	        inputStr.append(s); // 字符串串接--append追加
	    }
	    tResult.setText(inputStr.toString());
	    if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {
	        op = s;
	    }
	    if(s.equals("=")) {
	        String str = inputStr.toString();
	        str = str.substring(0, str.length() - 1);
	        String[] t = str.split("\\" + op);
	        double d1 = Double.parseDouble(t[0]);
	        double d2 = Double.parseDouble(t[1]);
	        double result = 0;
	        
	        switch (op) {
	            case "+":result = d1 + d2;break;
	            case "-":result = d1 - d2;break;
	            case "*":result = d1 * d2;break;
	            case "/":result = d1 / d2;break;
	        }
	        tResult.setText(inputStr.append(result + " ").toString());
	   
	    }
	}
}

实现计算功能的String类知识点
String类
1.字符串串接 +
2.字符串是常量,不可以被改变,对字符串做的任何改变都是产生了一个新的字符串----写在循环里,会产生大量新字符串
StringBuilder—字符串改变的时候是在原有字符串上做改变,不会产生新字符串
StringBuiler用法
StringBuilder inputStr=new StringBuilder(" ");//创建StrinBuilder对象
inputStr.append(s);//字符串串接–append追加,不会产生新的字符串
tResult.setText(inputStr.toString());
3.取子串:String类substring()方法
4.字符串的分拆:String 类split()方法
例如:
String s=’124.5+45”;
String[]result =s.split(“\ +”);
System.out.println(result[0]);
System.out.println(result[1]);
5.把字符串转换对应的数:“123.4”转换double数123.4
例如:
double d=Double.parseDouble(“123.4”);
System.out.println(d/2);
Float f=Float.parseFloat(“2.3”);
Int a=Integer.parseInt(“123”);
包装类:Double,Float,Integer,Charater

完整的代码

package computerPractice;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Computer implements ActionListener {
	JFrame frame = new JFrame("我的计算器");// 创建一个窗口
	JTextField text = new JTextField();
	JButton[] btns = new JButton[16];
	JButton delete = new JButton("删除");
	StringBuilder inputStr = new StringBuilder();// 保存字符串
	String op = " ";// 定义一个变量保存运算符

	public Computer() {
		JPanel center = new JPanel();// 创建面板对象center
		center.setLayout(new GridLayout(4, 4));// 将面板设置为网格布局
		JButton[] btns = new JButton[16];// 创建按钮字符串数组对象
		String lables[] = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+" };// 用lables标签保存按钮上的字符
		for (int i = 0; i < btns.length; i++) {// 用for循环遍历按钮数组

			btns[i] = new JButton(lables[i]);// 将lables数组传进按钮数组
			center.add(btns[i]);// 将按钮数组添加到面板center
			btns[i].addActionListener(this);
		}
		frame.add(center, BorderLayout.CENTER);// 把center设置在窗口的中间

		JButton delete = new JButton("删除");
	    delete.addActionListener(this);
	    
		frame.add(delete, BorderLayout.SOUTH);
		frame.add(text, BorderLayout.NORTH);
        frame.add(center, BorderLayout.CENTER);
	
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setSize(200, 200);
		frame.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String s = e.getActionCommand();// 获得按钮上的标签
		if (s.equals("删除")) {// 将获取的标签与删除进行内容的对比equals
			inputStr.setLength(0);// 将inputStr长度设置为零,以实现清空
		} else {
			inputStr.append(s);// 否则继续追加字符串
		}
		text.setText(inputStr.toString());// toString是将StringBuilder强制转换String
		if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {
			op = s;
		}
		if (s.equals("=")) {
			String str = inputStr.toString();
			str = str.substring(0, str.length() - 1);
			String[] reult = str.split("\\" + op);
			double d1 = Double.parseDouble(reult[0]);
			double d2 = Double.parseDouble(reult[1]);
			double endResult = 0;
			switch (op) {
			case "+":
				endResult = d1 + d2;
				break;
			case "-":
				endResult = d1 - d2;
				break;
			case "*":
				endResult = d1 * d2;
				break;
			case "/":
				endResult = d1 / d2;
				break;
			}
			text.setText(inputStr.append(endResult + " ").toString());
		}
	}

}

  • 31
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值