首页 > 技术文章 > JAVA GUI制作一个简易计算器

zqiuliu 2021-05-23 20:01 原文

JAVA GUI入门

用JAVA GUI制作一个简单计数器

简介

功能:实现加减乘除计算功能和复位功能

这里我所设计的简单计算器,计算加减乘除两个运算数类型为int
如果要计算小数,只需改动一下x,y,z的类型变为double以及字符串的转化为Double类型,同时需要添加一个JButton(".")按钮,代表小数点
若要添加删除文本框的一个字符,可设置一个JButton("<-")按钮,防止我们点击按钮点错,该按钮的注册监听窗口需要改写text文本框字符串,删除最后一位的操作,需要用到java的substring函数,可写为:text=text.substring(0,text.length()-1),然后调用JTextField的setText()方法

JAVA代码

package javaproject;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


class myframe{
	public  int x=0,y=0,result=0;//两个运算的数以及这两个数进行运算的结果
	public JTextField jf1=new JTextField("0",15);
	public String text="";//获取文本框字符串
	public String operator="";//操作符
	JFrame jframe;//容器
	Container  container;
	JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9;//数字按钮
	JButton j1,j2,j3,j4;//加减乘除按钮
	JButton x1,x2,x3;//等于和复位按钮
	JPanel jpanel1,jpanel2;//2个面板
	
	public class windowclose extends WindowAdapter
	{
		public void windowClosing(WindowEvent we)
		{
			System.exit(0);
		}
	}
	
	/*初始化*/
	public myframe()
	{
		 
		jframe=new JFrame("简单计算器");
		jframe.setResizable(false);
		jframe.setBounds(200, 200, 200, 200);
		
		container=jframe.getContentPane();//添加组件
		jpanel1=new JPanel();
		jpanel2=new JPanel();
		jframe.addWindowListener(new windowclose());
		
		//数字按钮
		b0=new JButton("0");b1=new JButton("1");b2=new JButton("2");
		b3=new JButton("3");b4=new JButton("4");b5=new JButton("5");
		b6=new JButton("6");b7=new JButton("7");b8=new JButton("8");
		b9=new JButton("9");
		
		//加减乘除按钮
		j1=new JButton("+");j2=new JButton("-");
		j1.setForeground(Color.red);j2.setForeground(Color.red);
		j3=new JButton("*");j4=new JButton("/");
		j3.setForeground(Color.red);j4.setForeground(Color.red);
		
		//等于复位按钮
		x1=new JButton("C");x2=new JButton("=");
		x2.setForeground(Color.red);
		
		//添加组件
		//第一个panel
		jpanel1.add(jf1);
		jf1.setHorizontalAlignment(jf1.RIGHT);//右对齐
		//第二个panel
		jpanel2.setLayout(new GridLayout(4,4));
		jpanel2.add(b0); jpanel2.add(b1);jpanel2.add(b2); jpanel2.add(j1);
		jpanel2.add(b3); jpanel2.add(b4);jpanel2.add(b5); jpanel2.add(j2);
		jpanel2.add(b6); jpanel2.add(b7);jpanel2.add(b8); jpanel2.add(j3);
		jpanel2.add(b9); jpanel2.add(x1);jpanel2.add(x2); jpanel2.add(j4);
		container.add(jpanel1,BorderLayout.NORTH);
		container.add(jpanel2,BorderLayout.SOUTH);
		jframe.setVisible(true);
		
		
	/*添加监听窗口*/
		//数字按钮监听窗口
		numberadapter number=new numberadapter();
		b0.addActionListener(number);b1.addActionListener(number);b2.addActionListener(number);
		b3.addActionListener(number);b4.addActionListener(number);b5.addActionListener(number);
		b6.addActionListener(number);b7.addActionListener(number);b8.addActionListener(number);
		b9.addActionListener(number);
		
		//复位监听窗口
		C fuwei=new C();
		x1.addActionListener(fuwei);
		
		//运算监听窗口
		Oper op=new Oper();
		j1.addActionListener(op);j2.addActionListener(op);
		x2.addActionListener(op);j3.addActionListener(op);
		j4.addActionListener(op);
		
	}
	
	/*注册监听器*/
		//注册数字监听器
	public class numberadapter implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			JButton button=(JButton)e.getSource();
			if(text.equals("0")&&button.getLabel().equals("0")){
				jf1.setText("0");
			}
			else{
			text+=button.getLabel();
			jf1.setText(text);
			}
		}
	}
	    //注册复位键
	public class C implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			jf1.setText("0");
			text="";
			operator="";
			x=0;y=0;result=0;
		}
	}
	    //注册运算按钮监听器
	public class Oper implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			JButton button=(JButton)e.getSource();
			if(button.getLabel()=="+")
			{
				operator="+";
				x=Integer.parseInt(jf1.getText());
				jf1.setText("0");
				text="";
			}
			else if(button.getLabel()=="-")
			{
				operator="-";
				x=Integer.parseInt(jf1.getText());
				jf1.setText("0");
				text="";
			}
			else if(button.getLabel()=="*")
			{
				operator="*";
				x=Integer.parseInt(jf1.getText());
				jf1.setText("0");
				text="";
			}
			else if(button.getLabel()=="/")
			{
				operator="/";
				x=Integer.parseInt(jf1.getText());
				jf1.setText("0");
				text="";
			}
			else if(button.getLabel()=="=")
			{
				if(operator=="+") {
				y=Integer.parseInt(jf1.getText());
				text="";
				result=x+y;
				jf1.setText(String.valueOf(result));
			    }
				else if(operator=="-")
				{
					y=Integer.parseInt(jf1.getText());
					text="";
					result=x-y;
					jf1.setText(String.valueOf(result)); 
				}
				else if(operator=="*")
				{
					y=Integer.parseInt(jf1.getText());
					text="";
					result=x*y;
					jf1.setText(String.valueOf(result)); 
				}
				else if(operator=="/")
				{
					y=Integer.parseInt(jf1.getText());
					text="";
					if(y==0) {jf1.setText("Math Error");}
					else {
						result=x/y;
						jf1.setText(String.valueOf(result)); 
					}
				}
			}
			
		}
	}
	
	
    
	
}

/*主main类*/
public static void main(String args[])
{
	myframe m=new myframe();
}

实现效果

1.计算10*10
image

2.计算4000-2100
image

3.计算5/0
5/0错误,可使用JAVA异常处理机制
image

推荐阅读