java中两种添加监听器的策略

简介:

/*第一种:将事件的处理委托给其他对象,下面的例子是委托给了MyListener(implements ActionListener)*/
import java.applet.Applet;
import java.awt.event.*;
import java.awt.*;
public class ChangeColor extends Applet{//Applet的默认布局为FlowLayout方式
   Color myColor;
   String str;
   Button btn;
   Label myLabel;
   Panel panBtn;
   public void init(){
      myColor=Color.black;  
      str="Change Color";
      myLabel=new Label("显示状态!");
      btn=new Button("单击变色");
      panBtn=new Panel();

      panBtn.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));//设置面板的对齐方式
      panBtn.setPreferredSize(new Dimension(100,90));
      panBtn.setBackground(Color.yellow);
      btn.addActionListener(new myListener(this));//为Button添加监听器,通过传递一个ChangeColor的引用来构造自己的监听器
      panBtn.add(btn);
      panBtn.add(myLabel);
      setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));//设置Applet的对齐方式
      add(panBtn);

      addItem("初始化...");
   }
 
   public void start(){
      /*panBtn.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));//设置面板的对齐方式
      panBtn.setPreferredSize(new Dimension(100,90));
      panBtn.setBackground(Color.yellow);
      btn.addActionListener(new myListener(this));
      panBtn.add(btn);
      panBtn.add(myLabel);
      setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));//设置Applet的对齐方式
      add(panBtn);*/

      //一般常在start()中启动动画或播放声音等的线程, 所以上面的/**/内容最好还是放在init()方法中
      addItem("启动...");
   }
   
   public void stop(){
      addItem("停止...");
   }
   
   public void destroy(){
      addItem("准备卸载...");
   }   

   public void addItem(String text){
       myLabel.setText(text);
       System.out.println(text);
   }

   public void paint(Graphics g){
      g.setColor(myColor);
      g.setFont(new Font("华文彩云", Font.BOLD, 20));
      g.drawString(str, 100, 200);
   }
}
/*定义自己的监听器类*/
class myListener implements ActionListener{
   ChangeColor xy;
   public myListener(ChangeColor x){//在这里我们想要调用其他类中的变量
       xy=x;
   }
   public void actionPerformed(ActionEvent e){
      if(xy.myColor==Color.black) 
            xy.myColor=Color.red;
       else
            xy.myColor=Color.black;
      xy.repaint();
   }
}

 /*第二种:将事件的处理委托给自身对象(自身对象实现了相应的监听器接口)*/
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class ChangeColor2 extends Applet implements ActionListener{
    Button btn;
    Panel pan;
    Color myColor;
    Label myLabel;
    String str;
    public void init(){
       myColor=Color.black;//初始化文本字体颜色
       btn=new Button("单击变色");
       btn.addActionListener(this);//将事件的处理委托给自身
       pan=new Panel();
       pan.setPreferredSize(new Dimension(100, 90));
       pan.setBackground(Color.blue);
       pan.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
       pan.add(btn);
       myLabel = new Label("显示状态");
       pan.add(myLabel);
       str="Change Color!";
       add(pan);

       addItem("初始化程序...");
    }
   public void start(){
       addItem("启动程序...");
   }
   public void stop(){
       addItem("停止程序...");
   }
   
   public void destory(){
       addItem("卸载程序...");
   }
  
   public void paint(Graphics g){
       g.setFont(new Font("华文行楷", Font.BOLD, 30));
       g.setColor(myColor);
       g.drawString(str, 100, 200);
   }
    
   public void actionPerformed(ActionEvent e){
       if(myColor==Color.black){
           myColor=Color.yellow;
       }
       else{
           myColor=Color.black;
       }
      repaint();
   }
   
   public void addItem(String tmp){
      myLabel.setText(tmp);
      System.out.println(tmp);
   }
}

目录
相关文章
|
11天前
|
NoSQL Java Redis
Java自定义线程池的使用
Java自定义线程池的使用
|
9月前
|
XML Java API
java中过滤器和监听器详解(一)
java中过滤器和监听器详解(一)
114 0
|
9月前
|
JavaScript Java 容器
java中过滤器和监听器详解(二)
java中过滤器和监听器详解(二)
93 0
|
设计模式 Java
java过滤器模式
过滤器模式(Filter Pattern),这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
69 0
|
数据可视化 Java
Java中的键盘监听机制(含实例)
这里我们使用addKeyListener()来实现添加键盘监听的功能,并且在添加键盘监听时,我们是对整个界面添加的,而不是新建一个按钮后给按钮绑定监听,所以代码会有一点点不同;由于我们不知道addKeyListener()的括号内应该传递什么参数,所以我们就需要来查看源码了,这也是在编写程序中非常重要的技能之一
768 0
Java中的键盘监听机制(含实例)
|
负载均衡 监控 Java
Java监听器
监听器(Listener):是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行
175 0
|
Java
Java 实现 动态更改注解
学习java第150天,使用反射+动态代理+爆破 实现动态更改注解 话不多说篇-直接干代码
310 0
|
设计模式 Java 数据库连接
Java 中创建代理的几种方式
代理模式 设计模式最初由 GOF 在《设计模式》一书中总结,将其划分为创建型、结构型、行为型三大类。其中结构型模式总结了一些将类或对象组合在一起的经典结构。
248 0
|
Java 数据库
Java-SpringBoot-04-自定义监听器及事件
日常项目中,很多业务场景会用到监听器,比如在Service中处理业务时,我们需要记录一个操作的日志到数据库中,我们怎么实现呢?
342 0
Java-SpringBoot-04-自定义监听器及事件
|
Java Android开发
【Java】监听器
本期主要介绍监听器
175 0
【Java】监听器