QQ登陆界面的响应及计算器的实现

事件机制实现的QQ登陆响应和计算器

        第一个需要介绍的就是:                 .事件源
swing awt 图形界面
 可以成为事件源对象的是:所有的图形界面组件对象。
 你的动作发生在哪一个组件上,那么该组件对象就是事件源对象。

6.事件监听器方法
 1.//动作监听器方法(输入框就是回车操作,按钮上就是鼠标单击)捕获事件源,输入输出
 addActionListener(ActionListener al);
 2.//鼠标监听器方法(捕获事件源上按下,释放,进入,离开)

      ( addMouseListener(MouseListener ml);
 3.//鼠标移动监听器方法);(捕获事件源上的鼠标移动和鼠标拖动)

 addMouseMotionListener(MouseMotionListener mml
 4.//键盘监听器方法
 addKeyListener(KeyListener kl);(捕获事件源上的键盘操作)
例如:1.事件源是jbulogin
      2.找到监听器,创建类去继承接口,因为接口不能实例化
      3.绑定事件处理类的对象
      4.设置事件源的动作命令值jbulogin
两个框,使用参数传递,监听的构造方法

在事件机制学习中重要是实现算法功能,以及你的创造力,比如说计算器的实现,拆分运算符时,实在是绞尽脑汁,幸亏java的String功能强大如斯,还有百度大神的帮助,还有xg。成功完成时候,欣慰之余,也略感遗憾,毕竟只能实现两个数的加减乘除,再多估计还是要增加算法,再以后学习中,会使计算器的功能更加完善。



 

 

一下是QQ监听处理,计算器实现代码

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JOptionPane;
public class LoginListener implements ActionListener {
	private JTextField d,e;
	private JFrame st1;
	public LoginListener(JFrame st1,JTextField d,JTextField e){
		this.st1=st1;
		this.d=d;
		this.e=e;
		
	}
	//事件处理方法
	public void actionPerformed(ActionEvent F){
		
		//获取输入的账号和密码
		
		String name =e.getText();
		String pwd = d.getText();
		
		
		//开始判断账号和密码是否都是administrator
		if(name.equals("administrator") && pwd.equals("administrator")){
			// 实例化一个JFrame类的对象
			JFrame jf=new JFrame();
			jf.setTitle("简单登录界面");// 设置标题
			jf.setSize(200, 400);
			jf.setResizable(false);
			jf.setLocationRelativeTo(null);
			// 设置关闭窗体的时候把程序退出
			jf.setDefaultCloseOperation(3);
			jf.setVisible(true);
			st1.dispose();//关闭登录界面
		}
		else{
			JOptionPane.showMessageDialog(st1,"你输入的账号和密码错误,请重新输入");
			
		}
	}



	}
	
	


  

public class Caculator {
	// 主函数程序入口
	public static void main(String[] args) {
		Caculator caculator = new Caculator();
		caculator.initUI();
	}

	// 定义初始化计数器界面的方法
	public void initUI() {
		// 实例化一个窗体对象
		JFrame jf = new JFrame();
		// 设置窗体的标题
		jf.setTitle("计算器");
		// 设置窗体的属性值
		jf.setSize(300, 400);// 设置计算器的大小
		jf.setLocationRelativeTo(null);// 设置居中出现
		jf.setResizable(false);// 设置窗体大小不可改变
		jf.setDefaultCloseOperation(3);// 设置关闭
		// 调用菜单创建方法
		JMenuBar menuBar = createMenuBar();
		// 设置窗体的菜单属性
		jf.setJMenuBar(menuBar);
		JPanel txtPanel = createTxtPanel();
		JPanel centerPanel=createCenter();
		jf.add(centerPanel,BorderLayout.CENTER);
		jf.add(txtPanel,BorderLayout.NORTH);
		addBackGroundImage(jf);

		jf.setVisible(true);// 设置窗体可见
	}

	// 定义创建菜单栏的方法
	public JMenuBar createMenuBar() {
		// 实例化一个菜单栏对象
		JMenuBar menuBar = new JMenuBar();
		// 实例化3个菜单:编辑、查看、帮助
		JMenu menu1 = new JMenu("编辑(E)");
		JMenu menu2 = new JMenu("查看(V)");
		JMenu menu3 = new JMenu("帮助(H)");
		// 将菜单添加到菜单栏
		menuBar.add(menu1);
		menuBar.add(menu2);
		menuBar.add(menu3);
		// 返回创建好的菜单
		return menuBar;
	}

	// 定义文本框显示面板
	public JPanel createTxtPanel() {
		// 实例化一个面板对象
		JPanel txtPanel = new JPanel();
		// 实例化一个文本框
		 text = new JTextField();
		// 设置文本框的大小
		text.setPreferredSize(new Dimension(200, 50));
		txtPanel.add(text);

		return txtPanel;
	}
	JTextField text;
    //添加背景图片的方法,你要把背景图加到那里
	public void addBackGroundImage(JFrame jf) {
		ImageIcon backGroundImage = new ImageIcon("images/12.png");
		JLabel backGround = new JLabel(backGroundImage);
		backGround.setBounds(0, 0, backGroundImage.getIconWidth(),
				backGroundImage.getIconHeight());
		jf.getLayeredPane().add(backGround, new Integer(Integer.MIN_VALUE));//用到jf的地方
		JPanel contentPanel = (JPanel) jf.getContentPane();
		contentPanel.setOpaque(false);

	}

	public JPanel createNorth() {
		JPanel northPanel = new JPanel();
		JTextField t1 = new JTextField();
		northPanel.setOpaque(false);
		return northPanel;
	}

	public JPanel createCenter() {
		JPanel centerPanel = new JPanel();
		//centerPanel.setLayout(new FlowLayout());
		centerPanel.setPreferredSize(new Dimension(220,0));
		String[] label = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
				"+", "-", "*", "/", "=", ".","EC" };// 声明标签数组label1存放按钮上的标签

		// 声明按钮数组存放16个按钮
		ActionListener a=new CaListener(text);
		for (int i = 0; i < label.length; i++)// 利用for循环把标签放在按钮上,使每个按钮添加事件监听器,在面板p1上添加上16个按钮
		{
			JButton b = new JButton(label[i]);
			b.addActionListener(a);
			//b.setPreferredSize(new Dimension(45,55));

			centerPanel.add(b); // 分别将按钮添加到面板p1上
		}
		centerPanel.setOpaque(false);//设置窗口透明
		
		return centerPanel;

	}
}

 

public class CaListener implements ActionListener {
	private JTextField jt1;//定义文本类的对象
	private double number1,number2;//存储数值
	private String str="";//存取运算符
	public CaListener(JTextField jt1){//将文本框对象赋值给当前类的对象
		this.jt1=jt1;
	}
	

	//处理事件机制
	public void actionPerformed(ActionEvent e) {
		
		String s1=e.getActionCommand();
		if(s1.equals("EC")){
			s1="0";
			jt1.setText("");
		}
		if(jt1.getText().equals("0")){
			jt1.setText(s1);
		}
		else{
			jt1.setText(jt1.getText()+s1);
		}
		//if(s1.equals("+")||s1.equals("-")||s1.equals("*")||s1.equals("/")){
			//number1=Integer.parseInt(jt1.getText());
			//number2
		//}
		//if()
		if (s1.equals("+") ||  s1.equals("*")) {
			     String recept;
			     recept=jt1.getText().replace(s1,"");
				 number1 = Double.parseDouble(recept);
				str = s1;
				 jt1.setText("");
				 }
       if(  jt1.getText().contains("=")&&str.equals("+")){
			
		
			String[] array=jt1.getText().split("=");
			number2=Double.parseDouble(array[0]);
			double count;
			count=number1+number2;
			str=""+count;
			//System.out.println(count);
			jt1.setText(str);
		  }
       if(  jt1.getText().contains("=")&&str.equals("*")){
			
   		
			String[] array=jt1.getText().split("=");
			number2=Double.parseDouble(array[0]);
			double count;
			count=number1*number2;
			str=""+count;
			//System.out.println(count);
			jt1.setText(str);
		  }
      
   if(  jt1.getText().contains("=")&&str.equals("*")){
		
		
		String[] array=jt1.getText().split("=");
		number2=Double.parseDouble(array[0]);
		double count;
		count=number1*number2;
		str=""+count;
		//System.out.println(count);
		jt1.setText(str);
	  }
		
		if( jt1.getText().contains("-")&& jt1.getText().contains("=")){
			
		
		String[] array=jt1.getText().split("=");
		System.out.println(array[0]);
		String[] array1=array[0].split("-");
		number1=Double.parseDouble(array1[0]);
		number2=Double.parseDouble(array1[1]);
		double count;
		count=number1-number2;
		str=""+count;
		//System.out.println(count);
		jt1.setText(str);
	  }
		if( jt1.getText().contains("/")&& jt1.getText().contains("=")){
			
			
			String[] array=jt1.getText().split("=");
			System.out.println(array[0]);
			String[] array1=array[0].split("/");
			number1=Double.parseDouble(array1[0]);
			number2=Double.parseDouble(array1[1]);
			double count;
			count=number1/number2;
			str=""+count;
			//System.out.println(count);
			jt1.setText(str);
		  }
		if( jt1.getText().contains("*")&& jt1.getText().contains("=")){
			
			
			String[] array=jt1.getText().split("=");
			System.out.println(array[0]);
			String[] array1=array[0].split("*");
			number1=Double.parseDouble(array1[0]);
			number2=Double.parseDouble(array1[1]);
			double count;
			count=number1*number2;
			str=""+count;
			//System.out.println(count);
			jt1.setText(str);
		  }
	}
	

}

 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值