题目要求

自己编写所有代码,设计一个程序的界面。该程序的功能要求是:运行之后,界面要求基本如左 图所示。其中界面设计时的顶层容器要求使用 JFrame(或 Frame), 界面上的“简易计算器”、“运算数一”、“运算数二”、“运算结果” 这些提示标签使用组件 JLabel(或 Label) ,输入运算数和输出运 算结果使用 JTextField(或 TextField),“相加”、“相减”和“全 部清零”使用按钮 JButton(或 Button)。 请注意查阅 JDK 的 API 文档中这些相关的类,看看它们具有哪些构造函数可以用来生成 所需的对象,它们具有哪些方法可以用来进行调用。注意保存好 本次实验代码,下一次实验将会要求实现其事件处理以继续完善。
在上一个实验(实验三)的第 1 题中,我们设计了一个简易计算器的界面。但仅仅要求设计出其 界面,而没有要求进行事件处理。在本次实验中,请实现其事件处理。使得程序运行之后,当输入两个 小数作为运算数后,点击“相加”或者“相减”按钮,两数相加或相减的结果就会显示在“运算结果” 框中。 如果点击“全部清零”按钮,那么两个运算数输入框和运算结果框中就会完全被清空。 2、对于第 1 题,除了正常数据之外,用户还可能因为好奇或误操作导致这样几种情况: (1)1 个 或 2 个运算数均未输入;(2)输入的数据串中含有除小数点和数字之外的非法字符;

(3)输入的数据串 中不含有除小数点和数字之外的非法字符,但小数点的个数超过 1 个或小数点的位置在数据的开头或结 尾处。 请改进你的程序,对这几种情况进行判断,不允许使用正则表达式或异常处理机制,完全使用字 符串类的各种方法,对这几种输入情况得到的用户所输入的字符串进行分析判断,并在你的程序图形界 面上向用户进行相应的提示。

java计算器按键清除 java计算器删除一位_非法字符

上代码

说明:这是我第一次做页面,感觉很棒,但是花的时间太长,而且找bug找的很鸡肋,最后发现这个bug不是我逻辑上的问题,而是由于复制粘贴的时候没有好好修改要修改的内容,所以我告诉大家:复制粘贴一时爽,一直复制粘贴一直爽爆。

发现这个代码块用不了了,算了直接复制过来吧

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class FrameApp extends JFrame{
	JFrame jfr = new JFrame("计算器");//搞个容器先
	JButton b1 = new JButton("相加");
	JButton b2 = new JButton("相减");
	JButton b3 = new JButton("全部清零");
	JTextField text1;
	JTextField text2;
	JTextField text3;
	JLabel lable1;
	JLabel lable2;
	JLabel lable3;
	
	public FrameApp (){
		jfr.setSize(410,550);//容器页面大小
		jfr.setLayout(null);//设置为null布局	
		
		b1.setSize(100,35);
	 
		b1.setLocation(70,305);
		b2.setSize(100,35);
		b2.setLocation(210,305);
		b3.setSize(100,35);
		b3.setLocation(135,390);
		lable1 =   new JLabel("第一个数字:");		
		lable1.setSize(100,100);
		lable1.setLocation(58,62);
		
		
		lable2 =   new JLabel("第二个数字:");		
		lable2.setSize(100,100);
		lable2.setLocation(58,127);
		
		
		lable3 =   new JLabel("运算的结果:");		
		lable3.setSize(100,100);
		lable3.setLocation(58,191);
		
		text1 = new JTextField();
		text2 = new JTextField();
		text3 = new JTextField();text3.setEditable(false);
		
		
		text1.setSize(145,30);
		text1.setLocation(129,95);
		
		text2.setSize(145,30);
		text2.setLocation(129,160);
		
		text3.setSize(145,30);
		text3.setLocation(129,224);
		
		jfr.add(lable1);jfr.add(text1);
		jfr.add(lable2);jfr.add(text2);
		jfr.add(lable3);jfr.add(text3);
		
		jfr.add(b1);
		jfr.add(b2);
		jfr.add(b3);
		
		
		//添加监听器
		b3.addActionListener(new MyEvent());
		b1.addActionListener(new MyEvent());
		b2.addActionListener(new MyEvent());
		
		
		
		jfr.setResizable(true);
		jfr.setVisible(true);//得放最后
		//pack();
		jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//可以关闭
	
	}
	public static void main(String args[]) {
		FrameApp a = new FrameApp();
	}
	
	
	
	/*监听器实现类*/
class MyEvent implements ActionListener{
	int i;
	
	public void actionPerformed(ActionEvent evt) {
		if((evt.getSource() == b3))//清零效果
		{
			
			 
			
			text1.setText("");
			text2.setText("");
			text3.setText("");
		}
		
		else if((evt.getSource() == b1))//相加效果
		{
			 
			if(judge() == 0)
			{
				text1.setText("");
				text2.setText("");
				
				return;
			}
			double a = Double.parseDouble(text1.getText());
			double b = Double.parseDouble(text2.getText());
			String reslut = Double.toString(a+b);
			text3.setText(reslut);
			
		}
		else //相减效果
		{
			 
			if(judge() == 0)
			{
				text1.setText("");
				text2.setText("");
				text3.setText("");
				
				return;
			}
			double a = Double.parseDouble(text1.getText());
			double b = Double.parseDouble(text2.getText());
			String reslut = Double.toString(a-b);
			text3.setText(reslut);
		}
		
			
			
	}
	private int judge() {//用于判断输入是否合法
		int i =0;
		String a = null;
		String b = null;
		int sumOfPoint = 0;
		
//		for( i =0;i<a.length();i++)
//			System.out.print(a.charAt(i));
//		System.out.println("");
//		for( i =0;i<a.length();i++)
//			System.out.print(b.charAt(i));
		
		if(text1.getText().length() == 0 || text2.getText().length() == 0)//判断运算符输入完整没有
		{
			JOptionPane.showMessageDialog(null, "你没有填完整运算数字,请重新输入");
			return 0;	
		}
		
		a = text1.getText();
		b = text2.getText();
		
		
		
		 if( a.charAt((a.length()-1)) == '.' || a.charAt(0) == '.' || b.charAt((b.length()-1)) == '.' || b.charAt(0) == '.')
		{
			JOptionPane.showMessageDialog(null, "你输入的小数点处于最前面或者最后面,请重新输入");
			return 0;
		}
		
		
		
		
		for( i = 0;i<a.length();i++)//判断运算符一有没有包含非法运算符,即输入了除了小数点和数字的字符
		{
			if(a.charAt(i) == '.')//计数运算数一的小数点数,如果大于一个就是错误的
				sumOfPoint++;
			if(sumOfPoint>1 )
			{
				JOptionPane.showMessageDialog(null, "你输入的小数太多了,请重新输入");
				return 0;
			}
			
			if(a.charAt(i) !='.' &&  a.charAt(i) !='0' &&  a.charAt(i) !='1' &&  a.charAt(i) !='2' &&  a.charAt(i) !='3' &&  a.charAt(i) !='4' && a.charAt(i) !='5' &&  a.charAt(i) !='6' &&  a.charAt(i) !='7' &&  a.charAt(i) !='8' &&  a.charAt(i) !='9' )
			{
				JOptionPane.showMessageDialog(null, "你输入含有非法字符,请重新输入");
				return 0;
			}
		}
		
		
		
			sumOfPoint = 0;//计数运算符二里边的小数点
			
			
			
			
		for( i = 0;i<b.length();i++) //判断运算符二有没有包含非法运算符,即输入了除了小数点和数字的字符
		{
			if(b.charAt(i) == '.')//计数运算符二的小数点数,如果大于一个就是错误的
				sumOfPoint++;
			
			
			if(sumOfPoint>1)
			{
				JOptionPane.showMessageDialog(null, "你输入的小数点太多了,请重新输入");
				return 0;
			}
			if(b.charAt(i) !='.' &&  b.charAt(i) !='0' &&  b.charAt(i) !='1' &&  b.charAt(i) !='2' &&  b.charAt(i) !='3' &&  b.charAt(i) !='4' && b.charAt(i) !='5' &&  b.charAt(i) !='6' &&  b.charAt(i) !='7' &&  b.charAt(i) !='8' &&  b.charAt(i) !='9' )
				
			{
				JOptionPane.showMessageDialog(null, "你输入含有非法字符,请重新输入");
				return 0;
			}
		}
		
		
		
		
		
		
	
	
	
	return 1;
		}
}}