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

目录
相关文章
软件测试/测试开发全日制培训|Pytest跳过用例和失败重试
软件测试/测试开发全日制培训|Pytest跳过用例和失败重试
自行设计开源的pdf转word软件(python开发设计)
自行设计开源的pdf转word软件(python开发设计)
自行设计开源的pdf转word软件(python开发设计)
|
关系型数据库 Serverless 数据库
RDS PostgreSQL Serverless部署心得分享
RDS PostgreSQL Serverless部署心得分享
|
监控 算法 新能源
模糊预测|RFIS与ANFIS模糊模型预测的比较(Matlab代码实现)
模糊预测|RFIS与ANFIS模糊模型预测的比较(Matlab代码实现)
164 0
|
算法 前端开发 JavaScript
【戏玩算法】03-给我几分钟,让你快速了解栈是什么?
前面两篇文章介绍了数据结构和算法的一些前置内容,这篇文章开始正式学习常见的数据结构,首先学习的就是栈(Stack)。
195 0
【戏玩算法】03-给我几分钟,让你快速了解栈是什么?
|
Go 开发者
切片的遍历 | 学习笔记
简介:快速学习切片的遍历
208 0
切片的遍历 | 学习笔记
|
存储 索引
十、清空表时优先使用truncate
十、清空表时优先使用truncate
234 0
|
安全 编译器 Linux
CentOS Linux 7安全基线检查SSH调优
CentOS Linux 7安全基线检查SSH调优
481 0
|
监控 关系型数据库 MySQL
zabbix4.0安装配置及使用
zabbix4.0安装配置及使用
6002 0