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);
   }
}

目录
相关文章
|
4月前
|
Java Windows
Java 事件链
Java 事件链
31 0
|
6月前
|
存储 Java 数据库
Java一分钟之-JPA实体监听器:@PrePersist, @PostLoad
【6月更文挑战第15天】JPA实体监听器通过`@PrePersist`等注解在实体生命周期关键点执行逻辑,例如设置默认值或处理并发更新。常见问题包括监听器未注册、并发冲突和性能影响。示例展示了如何在`@PrePersist`中设置默认创建时间和`@PostLoad`时初始化关联数据。使用监听器能增强灵活性,但也需注意潜在问题和优化。
156 6
|
7月前
|
设计模式 Java 数据安全/隐私保护
Java的想成生命周期与状态
Java的想成生命周期与状态
|
XML Java API
java中过滤器和监听器详解(一)
java中过滤器和监听器详解(一)
157 0
|
JavaScript Java 容器
java中过滤器和监听器详解(二)
java中过滤器和监听器详解(二)
112 0
|
设计模式 Java C#
事件与委托C#到java
事件与委托C#到java
|
数据可视化 Java
Java中的键盘监听机制(含实例)
这里我们使用addKeyListener()来实现添加键盘监听的功能,并且在添加键盘监听时,我们是对整个界面添加的,而不是新建一个按钮后给按钮绑定监听,所以代码会有一点点不同;由于我们不知道addKeyListener()的括号内应该传递什么参数,所以我们就需要来查看源码了,这也是在编写程序中非常重要的技能之一
1126 0
Java中的键盘监听机制(含实例)
|
负载均衡 监控 Java
Java监听器
监听器(Listener):是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行
222 0
|
Java 数据库
Java-SpringBoot-04-自定义监听器及事件
日常项目中,很多业务场景会用到监听器,比如在Service中处理业务时,我们需要记录一个操作的日志到数据库中,我们怎么实现呢?
417 0
Java-SpringBoot-04-自定义监听器及事件