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








本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3784159.html,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
人工智能 自然语言处理 前端开发
从理论到实践:使用JAVA实现RAG、Agent、微调等六种常见大模型定制策略
大语言模型(LLM)在过去几年中彻底改变了自然语言处理领域,展现了在理解和生成类人文本方面的卓越能力。然而,通用LLM的开箱即用性能并不总能满足特定的业务需求或领域要求。为了将LLM更好地应用于实际场景,开发出了多种LLM定制策略。本文将深入探讨RAG(Retrieval Augmented Generation)、Agent、微调(Fine-Tuning)等六种常见的大模型定制策略,并使用JAVA进行demo处理,以期为AI资深架构师提供实践指导。
277 73
|
4月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
108 0
|
5月前
|
存储 算法 Java
Java内存管理深度剖析与优化策略####
本文深入探讨了Java虚拟机(JVM)的内存管理机制,重点分析了堆内存的分配策略、垃圾回收算法以及如何通过调优提升应用性能。通过案例驱动的方式,揭示了常见内存泄漏的根源与解决策略,旨在为开发者提供实用的内存管理技巧,确保应用程序既高效又稳定地运行。 ####
|
3月前
|
Java 开发者 Spring
java springboot监听事件和处理事件
通过上述步骤,开发者可以在Spring Boot项目中轻松实现事件的发布和监听。事件机制不仅解耦了业务逻辑,还提高了系统的可维护性和扩展性。掌握这一技术,可以显著提升开发效率和代码质量。
113 33
|
3月前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
133 16
|
3月前
|
Java 开发者 Spring
java springboot监听事件和处理事件
通过上述步骤,开发者可以在Spring Boot项目中轻松实现事件的发布和监听。事件机制不仅解耦了业务逻辑,还提高了系统的可维护性和扩展性。掌握这一技术,可以显著提升开发效率和代码质量。
120 13
|
3月前
|
Java Spring
Java Spring Boot监听事件和处理事件
通过上述步骤,我们可以在Java Spring Boot应用中实现事件的发布和监听。事件驱动模型可以帮助我们实现组件间的松耦合,提升系统的可维护性和可扩展性。无论是处理业务逻辑还是系统事件,Spring Boot的事件机制都提供了强大的支持和灵活性。希望本文能为您的开发工作提供实用的指导和帮助。
150 15
|
3月前
|
Java 开发者 Spring
Java Springboot监听事件和处理事件
通过这些内容的详细介绍和实例解析,希望能帮助您深入理解Spring Boot中的事件机制,并在实际开发中灵活应用,提高系统的可维护性和扩展性。
91 7
|
5月前
|
运维 Java 编译器
Java 异常处理:机制、策略与最佳实践
Java异常处理是确保程序稳定运行的关键。本文介绍Java异常处理的机制,包括异常类层次结构、try-catch-finally语句的使用,并探讨常见策略及最佳实践,帮助开发者有效管理错误和异常情况。
356 6
|
4月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####