更新时间:2022-05-30 11:55:02 来源:极悦 浏览1436次
Java菜单栏事件是什么?极悦小编来为大家介绍。
(1)事件源(Event Source):即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件;
(2)事件(Event):事件Java封装了组件上发生的事情,比如按钮单击、按钮松开等等;
(3)事件监听器(Event Listener):负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件;
(1)首先事件是有不同的类别的,比如按钮单击、菜单项单击等事件就属于“动作事件”(Action Event),而关闭窗口、最小化窗口等事件就属于“窗口事件”(Window Event);
(2)不同类型的事件需要用不同类型的监听器监听;
(3)而监听器是一种类对象,这种类必须实现监听器接口(Listener),对于监听不同类型的事件AWT库准备了不同类型的监听器接口,比如要监听动作事件就必须实现ActionListener接口,监听窗口事件就必须实现WindowListener接口;
监听器中最重要的就是事件处理方法了,监听器必须在接受事件之后进行处理(响应);
(4)如何实现监听?
首先事件源(发生事件的组件)必须同意我身上发生的事件允许那些监听器监听;
也就是说想监听它身上发生的事件的监听器必须到它这里注册,即组件必须调用方法addXxxListener将监听器注册到它的监听器列表中;
当事件发生时就会将事件对象(Event)发送到所有注册过的监听器那里进行处理;
(5)事件源、事件、监听器的对应关系:
首先一个事件源可以产生多种类型的事件,比如窗口右上角的×按钮,当单击它时就会产生两种类型的事件,一个是按钮单击事件(属于Action Event),另一个是窗口关闭事件(属于Window Event);
监听器接口是什么类型就发送什么类型的事件:如果注册的监听器实现的是ActionEvent的接口,那么上述×按钮就只发送按钮单击事件给它而不会发送窗口关闭事件,除非监听器同时实现了两种类型的接口,那么该监听器就会同时受到两种类型的事件;
一个事件源可以注册多个监听器:一般符合逻辑的编程思想就是不同监听器监听、处理不同类型的事件,因此对于可以产生多种类型事件的事件源会注册多种类型的监听器,分别负责处理产生的多种事件;
当然一个事件源也可以注册多个相同类型的监听器,即比对于同一个事件(按钮单击),事件源注册多个实现ActionListener接口的监听器,那么这些监听器都会受到该事件,可能会疑问,这不是多此一举吗?一种事件就给出一种处理不是很好吗?那是因为有些情况下可能需要一个事件触发多种动作,每个监听器负责实现一个动作;
一个监听器可以监听多个事件源上的事件,即多个不同的组件用addXxxListener方法注册同一个监听器,那么当不同事件到来时监听器会调用其不同方法进行处理,或者在一个方法内部判断传进来的是什么事件,再进行特殊的处理;
(1)首先需要实现监听器类:自己编写一个类,至少要实现一种类型的监听器接口,并实现接口中所有的事件处理方法;
(2)创建组件,并对组件注册响应的监听器:首先需要创建监听器对象,将监听器对象作为参数传入组件的addXxxListener方法完成注册;
(3)全部工作完成,事件的处理完全自动进行;
(4)简单的示例:处理一个按钮的单击事件
public class AwtTest {
Frame f = new Frame("Event Test");
TextField tf = new TextField(30);
Button ok = new Button("OK");
class OkListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("OK button pushed!");
tf.setText("Hello!");
}
}
public void init() {
f.add(tf);
f.add(ok, BorderLayout.SOUTH);
ok.addActionListener(new OkListener());
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new AwtTest().init();
}
}
public class AwtTest {
Frame f = new Frame("Multiple Event Test");
TextArea ta = new TextArea(6, 40);
Panel p = new Panel();
Button btn1 = new Button("button1");
Button btn2 = new Button("button2");
class Listener1 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
ta.append("Listener1 be activated! Event Source:" + e.getActionCommand() + "\n");
}
}
class Listener2 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
ta.append("Listener2 be activated! Event Source:" + e.getActionCommand() + "\n");
}
}
public void init() {
f.add(ta);
p.add(btn1);
p.add(btn2);
f.add(p, BorderLayout.SOUTH);
Listener1 l1 = new Listener1();
Listener2 l2 = new Listener2();
btn1.addActionListener(l1);
btn2.addActionListener(l1);
btn2.addActionListener(l2);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
new AwtTest().init();
}
}
以上就是关于“Java菜单栏事件”的介绍,大家如果想了解更多相关知识,可以关注一下极悦的Java极悦在线学习,里面的课程内容细致全面,从入门到精通,适合没有基础的小伙伴学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习