接口与事件机制的总结
一、接口
1.定义:
1)定义接口的
关键字:interface
2)定义接口的格式:
public interface 接口 extends 接口名,…{
//常量
public static final 数据类型 常量名=值;//N.B:常量名的每一个字母都要大写
  //抽象方法
  public 返回值数据类型 方法名(数据类型 参数名,…); 
}
     注意:a.接口可以继承多个接口。
           b.接口中只有一种访问修饰符public。
           c.接口中默认就是常量,所以public static final 可以不写。
           d.接口也是一种类。
           e.接口不能用来实例化对象。
2.实现:
     1)实现接口的关键字:implements
     2)实现接口的格式:
        public 
class 类名extends 类或者抽象类 implements 接口,…{
}
      注意:a.类实现接口的时候,必须要实现接口中所有的抽象方法。
            b.类实现接口后,实际上两者之间就存在了继承关系(继承的特性都被保留下来了)。
           * c.类可以先继承类,然后再去实现接口。类就拥有了多个父接口。
二、抽象类
1.概念:抽象类就是介于类和接口之间的一种特殊类。
2.格式:
public abstract class 抽象类名 extends 抽象类或者类 implements 接口,…{
      
          //定义类中所有的属性和方法(普通方法和构造方法)
          //定义接口中的常量和抽象方法
             //常量
             访问修饰符 static final 数据类型 常量名=值;//常量名的每一个字母要大写哦~
             //抽象方法
           访问修饰符 abstract 返回值数据类型 方法名(数据类型 参数名,…);
}
三、事件机制
     1.事件源:
               a.只有图形界面类的组件才可以成为事件源对象。
               b.你的动作发生在哪一个组件上,那么该组件就是事件源对象。
     2.事件
监听器方法:
               a.给事件添加一个监听器的方法,让事件源捕获到对应的事件操作(动作),才能去调用
事件处理类对象。
               b.事件源.addActionListener(事件处理类对象);
3.事件处理类:
               a.它是最终处理者。
               b.格式:
                  public class 类名 implements ActionListener{
                          //实现抽象方法
}
 
/***********************************练习**********************************/ 
1.实现
QQ界面的登录功能:
   在界面基础上的主要代码:
1)	主函数里的代码:
           A.//声明一个
全局的变量名
	         private QQListener ll = null ;
         
B.在创建中间面板的方法中加入:
             //实例化一个QQListener事件处理类的对象ll,同时将账号和密码输入框对象通过构造方法传入到QQListener类中
     	      ll = new QQListener(jco,jpa,jf1);
           C.给事件源(按钮)添加监听器
              //给事件源添加一个监听器方法,同时绑定事件
处理器的对象ll
     	      jbu.addActionListener(ll);
2)事件监听器方法:
        package cn.zhm.study0718;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
/**
 * 登录事件的处理类,该类要实现ActionListener接口
 * @author becky
 *
 */
public class QQListener implements ActionListener {
       
	  private JComboBox jco;//用来获取账号的对象
	  private JPasswordField jpa;//用来获取密码的对象
	  private JFrame jf1;//用来获取登录窗口的对象
	  
	/*
	 * 构造方法
	 * jco用来获取账号的对象
	 * jpa用来获取密码的对象
	 * jf1用来获取登录窗口的对象
	 */
	  public QQListener(JComboBox jco,JPasswordField jpa,JFrame jf1){
		       this.jco=jco;
		       this.jpa=jpa;
		       this.jf1 = jf1;
	  }
	  
	  /**
	   * 事件的
处理方法
	   */
	  public void actionPerformed(ActionEvent e){
		  System.out.println("你点击了"+e.getActionCommand()+"按钮");
		     //获取输入的账号,同时将账号转换为字符串
		     String name=(String)jco.getSelectedItem();
		     //获取输入的密码,同时将字符数组转换为字符串
		     String pwd=new String(jpa.getPassword());
		     
		     //判断输入的账号和密码是否正确
		     if(name.equals("1136207581") && pwd.equals("123456")){
		    	   //实例化一个简单画板的界面
		    	   JFrame jf=new JFrame("简单画板");
		    	   jf.setSize(600,500);
		    	   jf.set
DefaultClose
Operation(2);
		    	   jf.setLocationRelativeTo(null);
		    	   jf.setVisible(true);
		    	   jf1.dispose();
		     }
		     else//输入的账号和密码不正确
		     {
		    	 //弹出一个消息提示框对象
		    	 JOptionPane.showMessageDialog(null,"你输入的密码和账号不正确!请重新输入!");
		     }
		     
		  
	  }
}
2. 实现计算器的+、-、*、/运算功能
1)思路:当定义好的参数检测到“=”时开始进行运算;未检测到“=”时,将参与运算的数值和运算符分别赋给不同的的参数。每次运算结束后,将参数清“0”。
2)主要代码
 package cn.zhm.study0718;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
/**
 * 输入事件的处理类,该类要实现ActionListener接口
 * @author Administrator
 *
 */
public class CounterListener implements ActionListener{
	
            private  JTextField jte;//用来获取文本输入值的对象
            private  String a;//被第一个数值赋值的对象
            private  String b;//被第二个数值赋值的对象
            private  String c;//用来判断数值和运算符的对象
            private  int flag;//用来控制输入文本框的对象
          
            //使用构造方法传递参数
            public CounterListener(JTextField jte,String a,String b,String c,int flag){
            	  this.jte=jte;
            	  this.a=a;
            	  this.b=b;
            	  this.c=c;
            	  this.flag=flag;
            	  
            }
            
            /**
             * 用来获取按钮的对象
             */
			@Override
			public void actionPerformed(ActionEvent e) {
			    //如果检测到“=”号,则开始运算
			 if(e.getActionCommand().equals("=")){
				
				String d=null;
				double i;
				//如果检测到加号,进行运算,输出结果
				 if(c.equals("+")){
				 i=(Double.parseDouble(a)+Double.parseDouble(b));
				 d=new String(Double.parseDouble(a)+"+"+Double.parseDouble(b)+"="+i);
				}
					
				//如果检测到减号,进行运算,输出结果
				 else if(c.equals("-")){
					 i=(Double.parseDouble(a)-Double.parseDouble(b));
					 d=new String(Double.parseDouble(a)+"-"+Double.parseDouble(b)+"="+i);	
				}
				
				//如果检测到乘号,进行运算,输出结果
				 else if(c.equals("×")) {
					i=(Double.parseDouble(a)*Double.parseDouble(b));
					d=new String(Double.parseDouble(a)+"×"+Double.parseDouble(b)+"="+i);
				}
				
				//如果检测到除号,进行运算,输出结果
				 else if(c.equals("÷")){
					i=(Double.parseDouble(a)/Double.parseDouble(b));
				 	d=new String(Double.parseDouble(a)+"÷"+Double.parseDouble(b)+"="+i);
				}
					
				 //第一次运算完毕后,把第一次运算的数值全部清零,为
第二次运算做准备
				 a=null;
				 b=null;
				 flag=0;
				 
				//将运算的式子和结果展现在文本输入框中
				 jte.setText(d);			
				 
				}
				 
				//如果检测到加、减、乘、除运算符
			 else if(e.getActionCommand().equals("+")||
				        e.getActionCommand().equals("-")||
				           e.getActionCommand().equals("×")||
				             e.getActionCommand().equals("÷")){
					
					//令flag的值为1
					flag=1;
					//将按钮图标转换为字符串
					c=e.getActionCommand();
					//将字符串c展现在文本输入框中
					jte.setText(c);
					
				 }
					else{
						//如果flag为0,将第一个数值展现在文本输入框中
						if(flag==0){
							//如果a为空,那么把对于它来说第一次点击的按钮的图标赋值给它
							if(a==null){
								a=e.getActionCommand();
								jte.setText(a);
							}
							//如果a不为空,那么把下一次点击的按钮的图标连接到它之前带有的图标后面
							else{
								a=a+e.getActionCommand();
								jte.setText(a);
							}
						}
						else if(flag==1){
							//如果flag为1,将第二个数值展现在文本输入框中
							 if(b==null){
								 b=e.getActionCommand();
								 jte.setText(b);
							 }
							 else{
								 b=b+e.getActionCommand();
								 jte.setText(b);
							 }
						}
							
						}
					}
				
					
				}
3.遇到的问题:
  a.我只想说,传参实在是我的拦路虎。
  b.初次接触java,很多类不是不知道就是用不
习惯。
  c.if判断完后,注意接下来的判断是if还是else if还是else,不然可能会得不到理想中的结果。	
  d.字符串的相加,如	:string a;	
a=a+e.getActionCommand();
    实际上是将两个字符连接起来。
  e. e.getActionCommand();得到的是事件源上的命令行。
  f.jte.setText(b);这是将b所带的值显示在定义好的文本输入框内。