3.1.1 基于监听的事件管理机制

这里的事件源就是JButton对象btn1,为了演示一个事件源可以有多个监听者,这里的事件源就是JButton对象btn1,为了演示一个事件源可以有多个监听者,事件处理机制就是我们和UI发生交互时,基于监听的事件处理机制,事件源

图片 8

Java事件管理机制1,java事件机制

贯彻二个小程序,如何通过点击不相同的按键,让面板的背景观发生相应的生成,如图:

图片 1

 1 public class Demo2 extends JFrame implements ActionListener{
 2     JPanel mp=null;   
 3     JButton btn1,btn2;
 4     
 5     public static void main(String[] args) {
 6         Demo2 demo=new Demo2();
 7     }
 8     
 9     public Demo2(){
10         mp=new JPanel();
11         btn1=new JButton("黑色");
12         btn2=new JButton("红色");
13         
14         this.add(btn1,BorderLayout.NORTH);
15         mp.setBackground(Color.BLACK);
16         this.add(mp);
17         this.add(btn2,BorderLayout.SOUTH);
18         
19         Cat myCat=new Cat();
20         
21         //在事件源(btn1)的身上注册监听者
22         btn1.addActionListener(this);     //这里的this指的是demo
23         btn1.addActionListener(myCat);    //从这句话就可以推出事件源对象是btn1,事件监听对象是myCat
24         //指定action命令(区分黑色按钮还是红色按钮)
25         btn1.setActionCommand("aa");
26         
27         btn2.addActionListener(this);
28         btn2.setActionCommand("bb");
29         
30         this.setSize(200,150);
31         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
32         this.setVisible(true);
33     }
34 
35     //对事件处理的方法
36     @Override
37     public void actionPerformed(ActionEvent e) {
38         //判断是哪个按钮被点击
39         if(e.getActionCommand().equals("aa")){
40             System.out.println("你点击了黑色按钮");
41             mp.setBackground(Color.BLACK);
42         }else if(e.getActionCommand().equals("bb")){
43             System.out.println("你点击了红色按钮");
44             mp.setBackground(Color.RED);
45         }else{
46             System.out.println("不知道");
47         }
48     }
49 }
50 //任何一个类,只要实现了相应的借口,就可以去监听某个事件源
51 class Cat implements ActionListener{
52     public void actionPerformed(ActionEvent arg0) {
53         if(arg0.getActionCommand().equals("aa")){
54             System.out.println("猫猫也知道你按下黑色按钮");
55         }else if(arg0.getActionCommand().equals("bb")){
56             System.out.println("猫猫也知道你按下红色按钮");
57         }
58     }
59 }

为了演示多少个事变源能够有五个监听者, 扩大了贰个Cat类。

图片 2

那边的事件源就是JButton对象btn1,btn2

事件监听者是demo,myCat

事件管理方法actionPerformed()函数

事件目的是37和52行的Action伊芙nt对象。

运转程序效果如下:

图片 3

点击中湖蓝开关,效果如下:

图片 4

再点击深紫红按钮,效果如下:

图片 5

实现三个小程序,如何通过点击区别的开关,让面板的背景象产生相应的生成,如图:
1 public class 德姆o2 e…

落到实处三个小程序,如何通过点击差异的开关,让面板的背景观发生相应的变动,如图:

4)直接动用Activity作为事件监听器

只须要让Activity类完成XxxListener事件监听接口,在Activity中定义重写对应的平地风波处理器方法
eg:Actitity实现了OnClickListener接口,重写了onClick(view)方法在为有个别建设构造增多该事件监听目的时,直接setXxx.Listener(this)就能够

落到实处代码如下:MainAcivity.java:

//让Activity方法实现OnClickListener接口    
public class MainActivity extends Activity implements OnClickListener{    
    private Button btnshow;    
    @Override    
    protected void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);    

        btnshow = (Button) findViewById(R.id.btnshow);    
        //直接写个this    
        btnshow.setOnClickListener(this);    
    }    
    //重写接口中的抽象方法    
    @Override    
    public void onClick(View v) {    
        Toast.makeText(getApplicationContext(), "点击了按钮", Toast.LENGTH_SHORT).show();         
    }         
}   

1)直接用无名内部类

常常最常用的一种:直接setXxxListener后,重写里面包车型大巴法子就能够;
平时是临时使用三次,复用性不高!

 完成代码如下:MainAcivity.java:

package com.jay.example.innerlisten;    

import android.os.Bundle;    
import android.view.View;    
import android.view.View.OnClickListener;    
import android.widget.Button;    
import android.widget.Toast;    
import android.app.Activity;    


public class MainActivity extends Activity {    
    private Button btnshow;    

    @Override    
    protected void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);    

        btnshow = (Button) findViewById(R.id.btnshow);    
        btnshow.setOnClickListener(new OnClickListener() {    

            //重写点击事件的处理方法onClick()    
            @Override    
            public void onClick(View v) {    
                //显示Toast信息    
                Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_SHORT).show();    
            }    
        });    
    }        
} 

  布局文件加入

<Button
            android:id="@+id/btnshow"
            android:layout_width="3dp"
            android:layout_height="48dp"
            android:layout_weight="1"
            android:text="密码可见" />

  

 1 public class Demo2 extends JFrame implements ActionListener{
 2     JPanel mp=null;   
 3     JButton btn1,btn2;
 4     
 5     public static void main(String[] args) {
 6         Demo2 demo=new Demo2();
 7     }
 8     
 9     public Demo2(){
10         mp=new JPanel();
11         btn1=new JButton("黑色");
12         btn2=new JButton("红色");
13         
14         this.add(btn1,BorderLayout.NORTH);
15         mp.setBackground(Color.BLACK);
16         this.add(mp);
17         this.add(btn2,BorderLayout.SOUTH);
18         
19         Cat myCat=new Cat();
20         
21         //在事件源(btn1)的身上注册监听者
22         btn1.addActionListener(this);     //这里的this指的是demo
23         btn1.addActionListener(myCat);    //从这句话就可以推出事件源对象是btn1,事件监听对象是myCat
24         //指定action命令(区分黑色按钮还是红色按钮)
25         btn1.setActionCommand("aa");
26         
27         btn2.addActionListener(this);
28         btn2.setActionCommand("bb");
29         
30         this.setSize(200,150);
31         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
32         this.setVisible(true);
33     }
34 
35     //对事件处理的方法
36     @Override
37     public void actionPerformed(ActionEvent e) {
38         //判断是哪个按钮被点击
39         if(e.getActionCommand().equals("aa")){
40             System.out.println("你点击了黑色按钮");
41             mp.setBackground(Color.BLACK);
42         }else if(e.getActionCommand().equals("bb")){
43             System.out.println("你点击了红色按钮");
44             mp.setBackground(Color.RED);
45         }else{
46             System.out.println("不知道");
47         }
48     }
49 }
50 //任何一个类,只要实现了相应的借口,就可以去监听某个事件源
51 class Cat implements ActionListener{
52     public void actionPerformed(ActionEvent arg0) {
53         if(arg0.getActionCommand().equals("aa")){
54             System.out.println("猫猫也知道你按下黑色按钮");
55         }else if(arg0.getActionCommand().equals("bb")){
56             System.out.println("猫猫也知道你按下红色按钮");
57         }
58     }
59 }
2)使用个中类

和方面的无名内部类分化啊!
使用优点:可以在此类中张开复用,可平昔访谈外界类的具有分界面组件!

完结代码如下:MainAcivity.java:

public class MainActivity extends Activity {    
    private Button btnshow;    
    @Override    
    protected void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);    
        btnshow = (Button) findViewById(R.id.btnshow);    
        //直接new一个内部类对象作为参数    
        btnshow.setOnClickListener(new BtnClickListener());    
    }     
    //定义一个内部类,实现View.OnClickListener接口,并重写onClick()方法    
    class BtnClickListener implements View.OnClickListener    
    {    
        @Override    
        public void onClick(View v) {    
            Toast.makeText(getApplicationContext(), "按钮被点击了", Toast.LENGTH_SHORT).show();   
        }    
    }    
} 

2.各样分化的选用方式:

大家以下边那么些: 轻便易行的按键点击,提醒Toast新闻的先后;动用三种差别的样式来兑现!

效果图:

图片 6

事件监听者是demo,myCat

1)直接用无名内部类

平日最常用的一种:直接setXxxListener后,重写里面包车型大巴办法就可以;
常常是如今采用三回,复用性不高!

贯彻代码如下:MainAcivity.java:

public class MainActivity extends Activity {    
    private Button btnshow;    

    @Override    
    protected void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_main);    
        btnshow = (Button) findViewById(R.id.btnshow);    
        btnshow.setOnClickListener(new OnClickListener() {    
            //重写点击事件的处理方法onClick()    
            @Override    
            public void onClick(View v) {    
                //显示Toast信息    
                Toast.makeText(getApplicationContext(), "你点击了按钮", Toast.LENGTH_SHORT).show();    
            }    
        });    
    }        
} 

1.基于监听的大运管理机制模型:

流程模型图:

图片 7

文字表明:

事件监听机制中由事件源事件事件监听器三类对象组成

管理流程如下:

  •  Step
    1:为有些事件源(组件)设置几个监听器,用于监听用户操作
  •  Step
    2:用户的操作,触发了事件源的监听器 
  • **Step
    3:
    转移了对应的风云指标 **
  • **Step
    4:
    将这么些事件源对象作为参数字传送给事件监听器 **
  • **step
    5:
    事件监听器对事件指标开始展览推断,施行相应的风浪管理器(对应事件的管理形式)**

归纳:

事件监听机制是一种委派式的事件管理机制,事件源(组件)事件管理委托给事件监听器
当事件源发生钦赐事件时,就通报钦点事件监听器,试行相应的操作

 

运作程序效果如下:

本节引言:

前方大家上学的是Android的UI控件,大家可以利用那几个控件构成三个完美的界面,然则一味是分界面而已;下一步将在从头学习逻辑与职业达成了,本章节批注的是Android的事件管理机制!何为事件管理机制?举个
简单的例子,比如点击三个按键,我们向服务器发送登录央浼!当然,Android中的事件管理机制不断这一种,
比方显示器发生采取,大家点击了荧屏上某些区域…简单题说,事件管理机制正是大家和UI产生互相时,大家在背后增加一些小动作而已!本节大家来介绍使用的最频仍的一种:基于监听的事件管理机制!

1.基于监听的年月拍卖体制模型:
流程模型图:

图片 8

文字表述:
事件监听机制中由事件源事件事件监听器三类对象组成
管理流程如下: Step
1:
为有些事件源(组件)设置三个监听器,用于监听用户操作 Step
2:
用户的操作,触发了事件源的监听器 Step 3:转换了对应的事件指标
Step 4:将以那一件事件源对象作为参数字传送给事件监听器 step
5:
事件监听器对事件指标开始展览推断,实践相应的风浪管理器(对应事件的拍卖办法)

归纳:

事件监听机制是一种委派式的事件管理机制,事件源(组件)事件管理委托给事件监听器
当事件源产生钦赐事件时,就通报钦点事件监听器,实行相应的操作