您的位置:首页 > 产品设计 > UI/UE

简述Java中,GUI的事件驱动模式

2015-07-02 10:46 495 查看
放弃了继续《猜猜看》的代码研究,因为我真的连自己不懂在哪里都不清楚。然后我随便上网了解了老师之前提过的问题,一是简述Java中,GUI的事件驱动模式。(我还是不了解)

图形用户界面GUI

1、基本组成:

a、提供最基本的GUI控件,如按钮、标签、文本字段等

b、将基本GUI控件组织为包容层次的容器组件,如顶层容器,中间容器等

c、负责管理容器中的组件布局的组件,如边界布局管理器、流布局管理器

d、事件传播与处理模式,如事件处理模式、各种事件监听器等

e、其他高级特征

2、一个简单的GUI程序:

import javax.swing.*;

public class Te {

public static viod main (String[] args) {

JFrame frame =new JFrame("welcome to GUI'world");

frame.getContentPane().add(

new JLabel("java'CUI Program“));

frame.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setVisible(true);}}

3、事件:

定义:一个携带信息的对象。标识事件的种类以及产生事件的事件源。需要由相应的监听器接受并处理

语义:类java.util.EventObject描述了所有事件的基本语义。

事件处理代码在一个单独线程(event-dispatching thread)中执行

4、事件处理程序的实现:

a、声明事处理件类时,要么指定一个监听接口,要么继承一个实现看监听器接口的类

如:piblic class Te inplements ActionListener{……}

b、将事件处理类的实现注册到一个或多个组件作为监听器

如:someCompinent.addActionListener(instanceOfTe);

c、实现监听器接口指定的方法

如:public void actionPerformed(ActionEvent evt)

5、

方法一:实现MouseListener接口

方法二:继承MouseListener类

方法三:使用匿名内部类

6、GUI组件(component):JPanel(面板)、JFrame(画框)、JLabel(标签)、JButton(按钮)

7、Swing组件分类:

顶层容器:为其他GUI组件的绘制提供位置

中间容器:仅是为了方便定位其他GUI组件

原子组件(atomic component):为了容纳其他GUI组件

8、Applet应用框架必须继承Applet或Applet类

9、网搜总结:http://jinnianshilongnian.iteye.com/blog/1902886

a、其所有组件都继承自java.awt.Component抽象类,其内部提供了addXXXListener(XXXListener l) 注册监听器的方法,即Component与实际动作之间依赖于XXXListener抽象。

b、Java Swing中处理各组件事件的一般步骤是: 

1.  新建一个组件(如JButton)。 

2.  将该组件添加到相应的面板(如JPanel)。 

3.  注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。 

4.  定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。 

以上步骤我们可以用多种方法实现。但人们通常用二种方法。第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。

 

比如获取焦点事件,很多组件都可以有这个事件,是我们知道组件获取到焦点后需要一个处理,虽然每个组件如何处理是特定的(具体的),但我们可以抽象一个FocusListener,让所有具体实现它然后提供具体动作,这样组件只需依赖于FocusListener抽象,而不是具体。

 

还有如java.awt.Button,提供了一个addActionListener(ActionListener l),用于注册点击后触发的ActionListener实现。

 

组件是一个抽象类,其好处主要是复用,比如复用这些监听器的触发及管理等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: