事件模型

import java.awt.*;
import java.awt.event.*;
public class TestActionEvent2 {
    public static void main(String args[]) {
            Frame f = new Frame("Test");
            Button b1 = new Button("Start");
            Button b2 = new Button("Stop");
            Monitor2 bh = new Monitor2();
            b1.addActionListener(bh);       
            b2.addActionListener(bh);
            b2.setActionCommand("game over");
            f.add(b1,"North");       
            f.add(b2,"Center");    
            f.pack();                
            f.setVisible(true);
    }
}
class Monitor2 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        System.out.println("a button has been pressed," + 
                "the relative info is:\n " + e.getActionCommand());             
    }
}

运行结果:

      先后点击:“start”和“stop”

      

  • TextField类:

    构造函数:TextField()

         TextField(String Text)

         TextField(int columns)

         TextField(String Text,int columns)

    常用方法:public  void  setText();

         public String getText();

           public void setEchoChar(char c) //设置此文本字段的回显字符。

         public void setEditable(boolean b)   //设置判断此文本组件是否可编辑的标志

         public boolean isEditable()

         public void setBackground(Color c)

         public void select(int selectionStart,int selectionEnd)  //选择指定开始位置和结束位置之间的文本。

         public void selectAll()    //选择此文本组件中的所有文本。 

         public void  addActionListener(ActionListener l)  //添加动作监听器

例1:

import java.awt.*;
import java.awt.event.*;

public class TFPassword {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new TFFrame2();
    }

}

class TFFrame2 extends Frame
{
    TFFrame2()
    {
        TextField tf = new TextField();
        add(tf);
        tf.addActionListener(new TFActionListener2());
        tf.setEchoChar('*');
        pack();
        setVisible(true);
    }
}

class TFActionListener2 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        TextField tf = (TextField)e.getSource();
        System.out.println(tf.getText());
        tf.setText("");
    }
}

运行结果:

输入后,按回车键在运行栏中显示。

  • 内部类

  好处:方便访问包装类的成员;

     可以防止其他类访问;

  何时使用:该类不允许其他类访问时;

import java.awt.*;
import java.awt.event.*;

public class TFMath {
    public static void main(String[] args) {
        new TFFrame8().launchFrame();
    }
}
 class TFFrame8 extends Frame{
     TextField t1,t2,t3;
     public void launchFrame(){
         t1=new TextField(10);
         t2=new TextField(10);
         t3=new TextField(15);
         Label l=new Label("+");
         Button bt=new Button("=");    
         bt.addActionListener(new MyMonitor());
         //bt.addActionListener(new MyMonitor(this));
         setLayout(new FlowLayout());
         add(t1);
         add(l);
         add(t2);
         add(bt);
         add(t3);
         pack();
         setVisible(true);
     }
     private class MyMonitor implements ActionListener  {//内部类;可直接访问包装类的成员变量和成员方法;生成TFFrame
            public void actionPerformed(ActionEvent e) {
                int n1 = Integer.parseInt(t1.getText());
                int n2 = Integer.parseInt(t2.getText());
                t3.setText("" + (n1+n2));
            }
        }
 }
 /*class MyMonitor implements ActionListener{
     TFFrame8 t=null;
     public MyMonitor(TFFrame8 tf){ 
          t=tf;
     }
     public void actionPerformed(ActionEvent e) {
            int n1=Integer.parseInt(t.t1.getText());
            int n2=Integer.parseInt(t.t2.getText());
            t.t3.setText(""+(n1+n2));
     }
     
 }*/

运行结果:

  

 

  •  Paint方法:

  每次需要重画的时候自动调用Paint方法

  Graphics可以想象成画笔,其中包含很多方法,具体查看API文档

import java.awt.*;

public class TestPaint {
    public static void main(String[] args) {
        new PaintFrame().launchFrame();
    }
}

class PaintFrame extends Frame {
    
    public void launchFrame() {
        setBounds(200,200,640,480);
        setVisible(true);
    }
    
    public void paint(Graphics g) {
        Color c = g.getColor();
        g.setColor(Color.red);
        g.fillOval(50, 50, 30, 30);
        g.setColor(Color.green);
        g.fillRect(80,80,40,40);
        g.setColor(c);
    }
}

运行结果:

     

  • 鼠标事件适配器:

 几种易混的方法:

   mouseClicked(MouseEvent e) // 鼠标按键在组件上单击(按下并释放)时调用。
   mousePressed(MouseEvent e) //鼠标按键在组件上按下时调用。
     void mouseReleased(MouseEvent e) // 鼠标按钮在组件上释放时调用。

例:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MyMouseAdapter{
  public static void main(String args[]) {
    new MyFrame("drawing...");
  }
}

class MyFrame extends Frame {
  ArrayList points = null;//ArrayList<Point> points=null(有泛型)
  MyFrame(String s) {
    super(s);
    points = new ArrayList(); 
    setLayout(null);
    setBounds(300,300,400,300); 
    this.setBackground(new Color(204,204,255));
    setVisible(true);
    this.addMouseListener(new Monitor());
    }
    
    public void paint(Graphics g) {
    Iterator i = points.iterator();//Iterator<Point> =points.iterator();
    while(i.hasNext()){
      Point p = (Point)i.next();//Point p = i.next();
      g.setColor(Color.BLUE);
      g.fillOval(p.x,p.y,10,10);
    }
  }
  
  public void addPoint(Point p){
    points.add(p);
  }
}

class Monitor extends MouseAdapter {//实现了MouseLisener接口,如果implement接口的话需要重写很多方法
  public void mousePressed(MouseEvent e) {
    MyFrame f = (MyFrame)e.getSource();
    f.addPoint(new Point(e.getX(),e.getY()));
    f.repaint();//先调用update方法然后调用paint方法
  }
}

运行结果:用鼠标任意点击会出现实心圆点;

  

  • Window事件:

  匿名类:语句简单且不经常修改时使用

import java.awt.*;
import java.awt.event.*;
public class TestWindowClose {
  public static void main(String args[]) {
    new MyFrame55("MyFrame");
  }
}
class MyFrame55 extends Frame {
  MyFrame55(String s) {
    super(s);
    setLayout(null);
    setBounds(300, 300, 400, 300);
    this.setBackground(new Color(204, 204, 255));
    setVisible(true);
    //this.addWindowListener(new MyWindowMonitor());
    
    this.addWindowListener(            //匿名类
    new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        setVisible(false);
        System.exit(-1);//非正常退出。。。。但是和正常退出在效果上没差
      }
    });
    
  }
  /*
  class MyWindowMonitor extends WindowAdapter {
      public void windowClosing(WindowEvent e) {
          setVisible(false);
          System.exit(0);//正常退出
      }
  }
  */
}

运行结果:可以关闭窗口

转载于:https://www.cnblogs.com/Lune-Qiu/p/7366259.html

C++实现拖拉机纸牌游戏:面向对象设计与复杂规则算法实践 面向对象编程(OOP)是构建复杂软件系统的核心范式,它通过封装、继承和多态等机制,将现实世界的实体抽象为类,从而管理复杂度并提升代码复用性。其原理在于将数据与操作数据的方法绑定,形成高内聚、低耦合的模块。在工程实践中,OOP的价值在于能够清晰建模业务逻辑,例如在游戏开发中,玩家、卡牌、游戏回合等都可以被设计为独立的类。应用场景广泛,从桌面应用到大型游戏引擎均有涉及。本文以经典的拖拉机纸牌游戏为例,具体展示了如何运用C++的类设计、STL容器(如vector)和智能指针等现代C++特性,来构建一个规则严谨、结 阅读详情

相关推荐

【JS】DOM事件模型

DOM事件模型主要包含4个方面的内容,分别是: 事件流 主流浏览器的事件模型 事件对象 注册与移除事件监听器 下面一一了解下: 首先,什么是DOM?文档对象模型(DOM)是表示文档(比如HTML和XML)和访问、操作构成文档的各种元素的应用程序接口(API)。一般的,支持Javascript的所有浏览器都支持DOM。 在DOM眼中,HTML跟XML一样是一种树形结构的文档,是根(roo

LZGS_4的专栏 3102

dom事件模型

到目前为止,DOM事件模型分为三个等,分别是0、1、2。   0是最早的,而且目前所有的浏览器仍支持0DOM模型0模型的注册事件,就是我们经常见到的,如: &lt;input type="button" onclick="buttonClick()"/&gt;   2的典型特点是事件传播的阶段,(捕获阶段,直接目标阶段,起泡阶段),注意在第三个阶段“起泡阶段”在IE...

java电商源码分享 278

Frigate进阶玩法:如何用MQTT和Python脚本扩展你的自定义目标检测算法

本文详细介绍了如何通过MQTT和Python脚本扩展Frigate的自定义目标检测算法,无需修改源码即可实现特殊场景(如工业设备异常、农业病虫害识别)的高效检测。文章涵盖Frigate配置、外部检测服务构建、高集成技巧及性能优化实践,帮助开发者灵活扩展智能监控能力。

weixin_42662293的博客 335

聊聊事件模型

如上,当希望为同一个元素绑定多个同类型事件的时候(上面的这个 btn 元素绑定2个点击事件),是不被允许的,后绑定的事件会覆盖之前的事件事件冒泡是一种从下往上的传播方式,由最具体的元素(触发节点)然后逐渐向上传播到最不具体的那个节点,也就是 DOM 中最高层的父节点。元素上发生,然后逐向上传播事件捕获与事件冒泡相反,事件最开始由不太具体的节点最早接受事件,而最具体的节点(触发节点)最后接受事件。,返回一个代表当前执行阶段的整数值。都是在冒泡阶段响应了事件,由于冒泡的特性,裹在里层的p 率先做出响应。

2401_86113453的博客 959

事件模型一(事件模型简介及常见事件模型

对于采用了图形用户界面的程序来说,事件控制是非常重要的。一个源(事件源)产生一个事件并把它(事件对象)送到一个或多个监听器那里,监听 器只是简单地等待,直到它收到一个事件,一旦事件被接收,监听器将处理这些事件。一个事件源必须注册监听器以便监听器可以接收关于一个特定事件的通知。

m0_48205251的博客 1061

JavaScript事件模型

JavaScript事件模型有以下三种模型。 1.原始事件模型(DOM0事件模型)     这是一种被所有浏览器都支持的事件模型(优点),没有事件流,事件一旦发生将马上进行处理,有两种方式可以实现原始事件:       (1)在html代码中直接指定属性值:<button id="demo" type="button" onclick="doSomeTing()" />   ...

Wonder 718

Laravel事件以及模型事件小结

在 Laravel 中,事件有普通事件,还有模型事件。类似的有通知和广播。这里直接上用法。 来步骤走起 普通事件通常有事件事件监听器,添加事件,分发这几步组成。 php artisan make:event WahahaEvent # 生成事件 php artisan make:listener WahahaListener # 生成监听器 # 在 App\Providers\...

技术人生的博客 1381

js事件模型

三种事件模型:原始事件模型(DOM0),DOM2事件模型,IE事件模型; 不同点:   事件程序的注册(给HTML元素所对应的JS对象绑定事件)   事件传播的过程 事件模型的注册:   一、原始事件模型(没有兼容性问题) 原始事件模型的特点: 事件类型上面有ON(onclick) 没有事件的传播(事件一旦发生就立刻调用事件句柄) 一个DOM对象只能注册一个类型的事件,如果注册了两个,则会...

celi_echo的博客 220

JS的事件模型

  之前对事件模型还是比较清楚的,许多概念都清晰映射在脑海中。工作之后,一方面使用的局限性,二是习惯于用框架中的各种事件监听方式,简单即方便,久而久之,事件的一些概念开始淡出记忆中,就像我现在已经开始淡忘C语言的指针、麦克斯韦方程组、矩阵的变换、最小二乘法等。知识就像五彩缤纷的鹅卵石铺垫在你前行的道路上,从简单到深刻,从深刻到领悟,一直 助你渐行渐远。回头看看事件模型呗。 一、事件简介...

diaolanbeng0962的博客 157

Redis事件模型

I/O多路复用是一种允许单个进程同时监视多个文件描述符的技术,当其中任何一个文件描述符准备好进行I/O操作时,多路复用器会通知应用程序。这使得应用程序可以在单线程中高效地处理多个连接。select:最早的I/O多路复用技术,支持的平台最广,但性能相对较低,且有文件描述符数量限制(通常为1024)。poll:类似于select,但没有文件描述符数量限制,性能略优于select。epoll:Linux平台专有,性能最好,没有文件描述符数量限制,是Redis在Linux上的首选。kqueue。

m0_65382359的博客 1025

Javascript事件模型系列(一)事件事件的三种模型

一、开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章。犹记得去年这个时候,参加百度的实习生面试,被问到事件模型,当时被问的一头雾水,平时敲onclick敲的挺爽,却没有关注到事件模型的整体概念。这个周末难得清闲,决定就javascript中的事件模...

aigenglong0649的博客 327

事件监听 事件模型

事件监听 事件监听就是让计算机等待某个事件的发生,当这个事件发生之后,对其做出一个相应,如等待鼠标单击按钮,单击发生时打开一个新的页面;但是你写的监听事件发现这件事情后,会进行阻止,让其无法跳转。 事件监听涉及到三个类对象 1、EventSource(事件源)事件发生的场所 2、Event(事件):事件封装界面组件上面发生的特定事件 3、EventListener(事件监听器):负责监听事件源发生的事件 事件监听用法 1、当同一个对象使用.onclick的写法触发多个方法的时候,后一个方法会把前一个方法覆

L289121的博客 270
上一篇: AWT和布局管理器
下一篇: java基础知识(一)之数据类型和运算符
diechi0288
博客等级 码龄10年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值