java丨事件驱动程序设计学习笔记(一)

一、事件和事件源

事件:事件可以定义为程序发生了某些事情的信号
源对象(源组件):能创建一个事件并触发该事件的组件成为源对象
事件类的根类:java.util.EventObject
可以使用EventObject类中的实例方法getSource()获得事件的源对象
如果一个组件可以触发某个事件,那么这个事件的任意子类都可以触发同类型的事件,如因为GUI组件的父类Component可以触发MouseEvent、KeyEvent、FocusEvent和ComponentEvent,所以任意的GUI组件都可以触发上述事件
二、监听器、注册以及处理事件
java使用一种基于委托的模型来处理事件:源对象触发一个事件,对此事件感兴趣的对象会处理它。将对此事件感兴趣的对象称为监听器。
一个对象要称为源对象上的事件监听器,需要具备两个条件:
(1)监听器对象的类必须是相应的事件监听器接口的实例,以确保监听器有处理这个事件的正确方法。
(2)监听器对象必须由源对象注册。注册方法依赖于事件的类型。
下面我们编写一个程序,使用两个按钮控制一个圆的大小

ControlCircle1.java

import javax.swing.*;
import java.awt.*;

public class ControlCircle1 extends JFrame{
   
    private JButton jbtEnlarge = new JButton("Enlarge");
    private JButton jbtShrink = new JButton("Shrink");
    private CirclePanel canvas = new CirclePanel();
    public ControlCircle1(){
    JPanel panel = new JPanel();//Use the panel to group buttons
    //将两个按钮添加到面板中
    panel.add(jbtEnlarge);
    panel.add(jbtShrink);

    this.add(canvas,BorderLayout.CENTER);//将画布添加到中央
    this.add(panel,BorderLayout.SOUTH);//将装有两个按钮的面板添加到SOUTH的位置
    }
    public static void main(String[] args){
    JFrame frame = new ControlCircle1();
    frame.setTitle("ControlCircle1");
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200,200);
    frame.setVisible(true);
    }
}
class CirclePanel extends JPanel{
private int radius = 5;//默认的圆的半径

/**repaint the circle */
protected void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawOval(getWidth()/2-radius,getHeight()/2-radius,2*radius,2*radius);
    }
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值