java的事件处理机制是怎样

Python015

java的事件处理机制是怎样,第1张

JAVA中当事件发生时,他不会进行广播,而是仅仅向关心此事件的对象发送消息。那么他怎么知道谁“关心”此事件呢。

这就要求关心此事件的对象,先行向事件的发出方进行注册,表示我关心此事件,当事件发生时请通知我。

【简单来说】:就是事件的“处理方”向事件的“发出方”先行注册,当事件发生时,事件的“发生方”负责通知事件的“处理方”。

譬如我编写一个窗口,用到了JFrame,我想实现一个功能,当按下Q键时,窗口关闭。

import java.awt.event.KeyAdapter

import java.awt.event.KeyEvent

import javax.swing.JFrame

public class TestFrame extends JFrame {

private static final long serialVersionUID = 5671798241966272024L

public static void main(String[] args) {

new TestFrame()

}

public TestFrame() {

setSize(400, 300)

setDefaultCloseOperation(EXIT_ON_CLOSE)

setVisible(true)

addKeyListener(new MyKeyListener())// 这句话就是所谓的注册事件。

// MyKeyListener作为事件的处理方,向事件的触发方TestFrame进行注册。

// 这句话的意思是说,MyKeyListener对TestFrame说,我对于你的键盘事件感兴趣,如果有键盘事件请告诉我。

// 而TestFrame有一个列表保存着MyKeyListener对象的引用。当键盘按下时,他会列表中所有引用,调用KeyPressed方法。

// 当键盘松开时还会调用keyReleased方法,但是我们对于键盘松开不太关心,所以下面的类,我们可以只编写KeyPressed方法。

}

private final class MyKeyListener extends KeyAdapter {

@Override

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_Q) {

System.exit(0)

}

}

}

}

你的问题就是,还不理解接口,包括抽象类

先说接口,如果你这个类不是抽象类,并且实施了某个接口,那么就要override这个接口里面的方法,方法内容可以是空,但是必要有这个方法

再说抽象类,和接口类似,必须override抽象类的抽象方法。

以上为啥说不是抽象类呢?如果是抽象类,那么可以不override,有非抽象类的子类override

你的错误就是,接口里面的方法没override全,把下面的贴上去就行了。

    public void mouseMoved(MouseEvent e) {

        

    }

    public void mouseClicked(MouseEvent e) {

        

    }

    public void mouseEntered(MouseEvent e) {

        

    }

    public void mouseExited(MouseEvent e) {

        

    }

    在java的图形界面开发中,要让图形界面接收到用户的操作,就要给各个组件添加事件处理机制。

事件 :  为了实现用户对图形界面组件的操作,定义了一些事件

鼠标事件:单击,双击,滚轮等....

    键盘事件 按下键盘,松开按键等...

焦点事件 :焦点获得 ,焦点失去...

窗口事件: 窗口打开,窗口关闭等....

事件源: 发声事件的场所. 比如按钮被点击,那么事件源就是按钮

文本框获得焦点. 那么事件源就是文本框

窗口被关闭,那么事件源就是窗口

事件源-----产生----->事件------>被事件监听器发现------>进入事件处理代码

import java.awt.Frame

import java.awt.event.WindowAdapter

import java.awt.event.WindowEvent

public class DemoAction extends Frame {//窗口就是事件源

public DemoAction() {

this.setTitle("窗口关闭")

this.setLocation(400, 200)

this.setSize(360, 280)

//给窗口绑定一个事件监听器

this.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {//事件WindowEvent

System.exit(0)//关闭窗口事件, 那么退出jvm

}

})

this.setVisible(true)

}

public static void main(String[] args) {

new DemoAction()

}

}