博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中两种添加监听器的策略
阅读量:6434 次
发布时间:2019-06-23

本文共 2977 字,大约阅读时间需要 9 分钟。

/*第一种:将事件的处理委托给其他对象,下面的例子是委托给了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,如需转载请自行联系原作者
你可能感兴趣的文章
Mysql修改存储过程相关权限问题
查看>>
4.2权限管理
查看>>
彻底理解ThreadLocal
查看>>
Node.js~ioredis处理耗时请求时连接数瀑增
查看>>
Linux命令行上执行操作,不退回命令行的解决方法
查看>>
【AngularJS】—— 8 自定义指令
查看>>
零元学Expression Blend 4 - Chapter 36 来玩捉迷藏吧!!!看看ScrollBar的Disabled与Hidden之差异...
查看>>
AlarmManager机制和系统唤醒锁的总结
查看>>
零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)
查看>>
158.5. manifests
查看>>
glyphicon halflings regular ttf 报错
查看>>
公众号临时预览链接转永久链接怎么操作
查看>>
DAU新解
查看>>
Java实现简易的文件的迁移器
查看>>
golang ffmpeg 做网络直播
查看>>
Windows 7平台安装Oracle Client 10g版本时需要做的一点变更
查看>>
Oracle Online Redefinition在线重定义(下)
查看>>
扩展GridView控件——为内容项添加拖放及分组功能
查看>>
qsort()与sort的用法(收藏)
查看>>
★电车难题的n个坑爹变种
查看>>