JAVA学习--5.界面开发(简单计算器的实现)

本文介绍了如何使用Java Swing库创建一个简单的计算器界面,包括设置窗体属性、添加组件如标签和按钮,以及使用FlowLayout布局。同时,文章讲解了如何为按钮添加监听器以实现基本的计算功能,包括点击事件的处理和逻辑判断。此外,还提到了类与接口的概念,以及一些关键的Java图形用户界面组件和属性设置。
摘要由CSDN通过智能技术生成


计算器的创建

1.可视化界面开发流程

​ (1)开发流程:想要用java开发一个可视化界面的窗口,首先我们得知道一个基本的开发流程

//1.创建一个窗体对象
	//窗体就是可视化的窗口,必须要有才可以显示
	//JPanel是一个面板,上面可以放组价,需要放在窗体上。当布局时可看做一个组件
//2.设置窗体对象的属性
	//设置窗口的标题
	//设置窗口的大小(宽,高)
	//设置窗口的默认关闭形式
	//设置窗口可视(如果有组件,最好放到添加玩组件之后,要不然初次刷新出不来组件)
	//*设置窗口布局
//3.创建组件添加到窗口中
	//创建组件
	//设置组件属性
	//将组件添加到窗口

(2)所需要的包和其中的内容

​ java.awt — java早期界面开发工具 包括一些规则性的类:颜色,字体,大小,布局

​ javax.swing — 升级之后的工具包 包括基本的组件类

2.创建一个计算器界面

按照上面的开发流程,创建一个计算器的界面

public static void main(String[] args){
	//1.创建一个窗体对象
		JFrame jf = new JFrame();
	//2.设置窗体对象的属性
		//设置窗口的标题
		jf.setTitle("computer");
		//设置窗口的大小
		jf.setSize(860,960);
		//设置窗口的默认关闭形式
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
		
		//*设置窗口布局
		FlowLayout fl = new FlowLayout();
		jf.setLayout(fl);
    
    //3.创建组件添加到窗口中(此处以btn1为例,其余类此)
		//创建组件
		String result = "";
		JLabel lab = new JLabel(result); 
		
		//设置组件属性
		Font f=new Font(Font.DIALOG,Font.BOLD,40);
		Dimension d = new Dimension(800,80);
		//组件大小设置
		lab.setPreferredSize(d);
		//设置字体
		lab.setFont(f);
		//添加边框
		lab.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
		//调整底色
		lab.setOpaque(true);   
		lab.setBackground(Color.white);

		//将组件添加到窗口
		jf.add(lab);
	
		//按钮添加
		String btn_name = "123+456-789*0C=/";
		JButton[] btn = new JButton[16];
		Dimension btnd = new Dimension(200,200);
		for(int i=0;i<16;i++)
		{
			char x = btn_name.charAt(i);
			//x必须是String类型,不能是char
			btn[i]=new JButton(x+"");
			btn[i].setName(x+"");
			btn[i].setPreferredSize(btnd);
			btn[i].setFont(f);
			jf.add(btn[i]);
		}
		
		//设置窗口可视
		jf.setVisible(true);
}

到此处位置,整个界面的布局完成,得到效果图如下:

image-20210427125017672
(1)布局

​ ps:只对这次计算器用到的布局作解释,其余更多需继续查找资料

整个界面采用的流式布局

		//*设置窗口布局
		FlowLayout fl = new FlowLayout();
		jf.setLayout(fl);

该布局根据界面和组件的大小自动从左到右,从上到下布局。使用该布局时需要自己主要界面和组件的大小,据此调整位置

(2)组件

​ ps:只对这次计算器用到的组件作解释,其余更多需继续查找资料

  • JLabel标签
		JLabel lab = new JLabel(x);

x为一个字符串或者字符串变量,显示在标签中

  • JButton
JButton btn1 = new JButton("");

" "内为按钮中显示的内容

  • 设置属性(以JLabel标签为例)

    		//组件大小设置
    		Dimension btnd = new Dimension(200,200);
    		lab.setPreferredSize(d);
    		//设置字体
    		Font f=new Font(Font.DIALOG,Font.BOLD,40);
    		lab.setFont(f);
    		//添加边框
    		lab.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
    		//调整底色
    		lab.setOpaque(true);   
    		lab.setBackground(Color.white);
    
3.添加监听

(1)创建监听类实现接口

实现接口需重写接口中的所有类

public class ComputerLisener implements ActionListener{
    public void actionPerformed(ActionEvent e){
    	System.out.print("正在计算中");
    }
}

(2)创建监听类对象

//创建监听器
		ComputerLisener ul = new ComputerLisener();

(3)监听

//组件加入监听
		for(int i=0;i<16;i++)
		{
			btn[i].addActionListener(ul);
		}
//设置一个储存数字的数组和一个储存符号的数组(全局变量)
		ArrayList<String> num = new ArrayList<String>();
		int count_num = 0;
		ArrayList<String> sym = new ArrayList<String>();
		int count_sym = 0;

//获取组件,得到组件设置的name
    	JButton tf = (JButton)e.getSource();
    	String name = tf.getName();

//进行逻辑判断
	//归零
	if(name.equals("C"))
    	{
    		show="";
    		count_num = 0;
    		count_sym = 0;
    		num.clear();
    		sym.clear();
    	}
     	//输入的是数字,将其加入数字数组
    	else if 	(name.equals("1")||name.equals("2")||name.equals("3")||name.equals("4")||name.equals("5")||name.equals("6")||name.equals("7")||name.equals("8")||name.equals("9")||name.equals("0")){
    		show+=name;
    		num.add(name);
    		count_num++;

    	}
		//输入的是符号,将其加入符号数组
    	else if(name.equals("+")||name.equals("-")||name.equals("*")||name.equals("/")){
    		show=show+name;
    		sym.add(name);
    		count_sym++;
    		System.out.println("count_sym:"+count_sym);
 
    	}
    	//按下=时进行计算
    	else if(name.equals("=")){
    		//先看有没有乘除(此处只给出了乘法判断,其余计算类似)
    		for(int i=0;i<count_sym;i++)
    		{
    			String temp_sym = sym.get(i);
    			System.out.println("temp_sym:"+temp_sym);
    			if(temp_sym.equals("*"))
    			{
    				System.out.println("乘法进行中...");
    				int temp_num1 = Integer.parseInt(num.get(i));
    				int temp_num2 = Integer.parseInt(num.get(i+1));
    				System.out.println("1:"+temp_num1);
    				System.out.println("2:"+temp_num2);
    				String temp_result = Integer.toString(temp_num1*temp_num2);
    				num.set(i,temp_result);
    				System.out.println("结果:"+temp_result);
    				num.remove(i+1);
    				sym.remove(i);
    				i--;
    				count_sym--;
    				count_num--;    				
    			}
    			else if(temp_sym.equals("/"))
    			{
    				System.out.println("除法进行中...");
    				if(num.get(i+1).equals("0"))
    				{
    					System.out.println("不能除以0");
    					error = 1;
    				}

    	
    	System.out.println("show:"+show);
        //将其输出
    	jl.setText(show);
基本思想补充:

​ 1.类中是用来初始化的,不能有逻辑判断,要放到方法里

其余补充

1.专业名词对于的英文(用于查看报错信息):

项目 project

方法 method

函数 function

属性 文件属性 Attributes 系统属性 Property

类 class

接口 interface

抽象类 abstract

枚举类 Enumeration

调用 invoke/call

递归 recursion

动态规划 dynamic programming

继承 inheritance

实例 instance

迭代器 iterator

监听器 listener

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值