Java事件模型与Android事件模型的比较
Java事件模型与Android事件模型的比较
比较结果:Android借鉴了Java2中的UI事件处理机制,但是,Android 又提供了另一种事件?理器(event handler),而这个方式是否与java1.0事件模型一样呢,有待求证。
Java事件模型:
我们把JDK1.0事件处理模型成为Java1.0事件模型,而从jdk1.1后的版本事件处理模型称为Java 2事件处理模型。
1. Java1.0事件模型:
dispatchEvent()-postEvent()-handleEvent()
在JDK1.0的版本采用用的事件模型,提供了基本的事件处理功能。这是一种包容模型,所有事件都封装在单一的类Event中,所有事件对象都由单一的方法 handleEvent来处理,这些定义都在Component类中。
为此,只有Component类的子类才能充当事件处理程序,事件处理传递到组件层次结构,如果目标组件不能完全处理事件,事件被传递到目标组件的容器。
在Java1.0事件处理模型中事件处理是以如下方法执行的。deliverEvent()用于决定事件的目标,目标是处理事件的组件或容器,此过程开始于GUI层的最外部而向内运作。
当按一个button时,如果检测到是该按钮激发的事件,该按钮会访问它的deliverEvent()方法,这一操作由系统完成。一旦识别目标组件,正确事件类型发往组件的postEvent()方法,该方法依次把事件送
到handleEvent()方法并且等待方法的返回值。
"true"表明事件完全处理,"false"将使postEvent()方法联系目标容器,希望完成事件处理。
2. Java 2事件处理模型:
在Java2处理事件时,没有采用dispatchEvent()-postEvent()-handleEvent()方式,采用了监听器类,每个事件类都有相关联的监听器接口。事件从事件源到监听者的传递是通过对目标监听者对象的Java方法调用进行的。
对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承 java.util.EventListener。实现了事件监听者接口中一些或全部方法的类就是事件监听者。
伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。事件状态对象作为单参传递给应响应该事件的监听者方法中。发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,并接受对指定事件监听者接口实例的引用。
3. Java事件和万事一样有其生命周期,会出生也会消亡。下图3.1给出了Java事件生命周期的示意图:
事件最初由事件源产生,事件源可以是GUI组件Java Bean或由生成事件能力的对象,在GUI组件情况下,事件源或者是组件的同位体(对于Abstract Window Toolkit[awt]GUI组件来说)或组件本身(对于Swing
组件来说)。
事件生成后放在系统事件队列内部。现在事件处于事件分发线程的控制下。事件在队列中等待处理,然后事件从事件队列中选出,送到dispatchEvent()方法,dispatchEvent()方法调用processEvent()方法并将事件的一个引用传递给 processEvent()方法。
此刻,系统会查看是否有送出事件的位置,如果没有这种事件类型相应的已经注册的监听器,或者如果没有任何组件受到激活来接收事件类型,事件就被抛弃。当然上图显示的是AWTEvent类的子类的生命周期。 dispatchEvent()方法和processEvent()方法把AWTEvent作为一个参数。但对,javax.swing.event并不是AWTEvent子类,而是从EventObject直接继承过来,生成这些事件的对象也会定义fireEvent()方法,此方法将事件送到包含在对象监听器列表内的那种类型的任何监听器。
3.2 Java事件捕获
从上面的分析我们知道,任何事件产生到 dispatchEvent()方法分发方法前,所有的事件都是存放在系统事件的队列中,而且所有的事件都由dispatchEvent()方法来分派。所以只要能重载dispatchEvent()方法就可以获取系统的所有事件,包括用户输入事件。一般来说,系统事件队列的操作对用户来说是可以控制。它在后台自动完成所要完成的事情,使用EventQueue类可以查看甚至操纵系统事件队列。
Java提供了EventQueue类来访问甚至操纵系统事件队列。EventQueue类中封装了对系统事件队列的各种操作,除dispatchEvent()
方法外,其中最关键的是提供了push()方法,允许用特定的EventQueue 来代替当前的EventQueue。
只要从EventQueue类中派生一个新类,然后通过push()方法用派生类来代替当前的EventQueue类即可。这样,所有的系统事件都会转发到派生EventQueue类。
而在实际的开发中,我们并不关心事件的分派方式,也就是说,并不会重载dispatchEvent(),
因为我们的目的并不是取系统的所有事件,而是对感兴趣的事件(例如,按键,鼠标的按下与释放)进行处理,而这些事件不会凭空产生,是由事件源(例如,button,window这些GUI组件产生的)。另一个原因是,java2中已经给我们提供了事件监听这种处理方式,而且是非常安全的,并且也易于开发,
4. 如何使用事件处理模型对事件进行处理:
作为一个程序开发者,我们所要做的是创建事件监听器对象并且在被激活事件的组件中进行注册。在java中,每一个组件会产生什么样的事件,已经被定义好了。或者说,对于任何一个事件来说,哪些组件可以产生它,已经是确定的了。
(1) 为了创建事件监听器以及在被激活事件的组件中进行注册,需要了解以下四个组件概念。
事件类、事件监听器、事件处理器和适配器四个组件。
事件类:见图4.1
事件监听器:是interface, 形中XXListener,而且,在java中,
这些interface已经被定义好了。用来被实现,它定义了事件处理器(即事件处理的方法原型,这个方法需要被重新实现)。例如,ActionListener接口,
MouseListener接口
WindowListener接口
KeyListener接口
ItemListener接口
MouseMotionListener接口
FocusListener接口
ComponentListener接口
适配器:因为对于有的事件监听器来说(例如,MouseListener
),java已经提供了实现它的类,那么我们就可以直接继承这个类,来处理事件。
Java提供了表示不同的事件的类, java.util. EventObject是事件顶层类,其层次结构如下:
图4.1
需要说明的是:
? EventObjet类提供了getSource()方法获取产生事件的源对象。
? AWTEvent类提供了getID() 方法返回事件本性的标识符。例如,如果鼠标事件发生,能够查出是单击、拖拉、按、还是其他操作。
(2)程序开发步骤:
所谓的创建事件监听器对象,就是创建一个类,而这个类必须实现
形如XXListener的接口(或者继承”已经实现了XXListener的类”),当然,实现这个接口就意味着重写XXListener的方法。例如,对于ActionListener, 只有一个actionPerformed方法:
class B1 implements ActionListener { // 实现ActionListener public void actionPerformed(ActionEvent e) { //重写actionPerformed getAppletContext().showStatus("Button 1");
}
在被激活事件的组件中注册事件监听器: 即调用形如addXXListener()的方法,例如:
Button b1 = new Button("Button 1"),b1.addActionListener(new B1());
//注册事件监听器,b1就是被激活事件的组件这样一来,当事件被激活时,处理流程如下(根据图3.1对照来看):由于已经通过addActionListener进行了事件监听器的注册,所以,就会调用到特定的事件处理方法,即actionPerformed()函数。这样,执行的结果就要看actionPerformed是具体做什么工作了。完整的例子(来源于think in java 13.16.1节): //: Button2New.java// Capturing button pressesimport java.awt.*;import java.awt.event.*; // Must add thisimport java.Applet.*; public class Button2New extends Applet { Button b1 = new Button("Button 1"), b2 = new Button("Button 2"); public void init() { b1.addActionListener(new B1()); b2.addActionListener(new B2()); add(b1); add(b2); } class B1
implements ActionListener { public void actionPerformed(ActionEvent e) { getAppletContext().showStatus("Button 1"); } } class B2 implements ActionListener { public void actionPerformed(ActionEvent e) { getAppletContext().showStatus("Button 2"); } }} 这是最常用的一种方式:定义一个内部类,来实现ActionListener监听器。而在外部类中,定义一个这样的对象,去注册监听器,通过调用addActionListener方法,需要注意的是,这个内部类对象是作为addActionListener的参数,在本类中,是直接作为匿名对象被创建的。这里,也可以不用匿名对象,而直接new 一个对象,然后,这个对象作为参数传给addActionListener。考虑:不用匿名对象与用匿名对象的区别? 更多的例子,请参考《think in java 13.16》,推荐编码方法见《think in java 13.16.7推荐编码方法》 Android事件模型(从UI角度来说):从网上摘抄了一些相关文章(共5篇),从这几篇文章来看,Android事件模型与java2的事件模型处理方式一样,对事件的处理,都是采用事件监听器的方式来实现的。
文章1:
Jollen 的 Android 教?,#15: 什?是事件毕?器(Event Listener)?
???生基本的UI後,接著就要??UI的事件?理(UI Events),才能?UI 陪使用者「互?」。
什?是事件毕?器(Event Listener)
UI的使用者事件?理,即View如何?理使用者的操作,是一?重要的疹铨。View是重要的??,它是陪使用者互?的前?;在Android框架的韵?中,以事件毕?器(event listener)的方式??理UI的使用者事件。Android框架提供了非常良好的UI事件?理?制。先前的教?提到,View 是捞氧UI的??,每?View物件都可以向Android框架暂?一?事件毕?器。每?事件毕?器都包含一?回呼函?(callback method),
呃?回呼函?(callback method)主要的工作就是回?或?理使用者的操作。
Event Listener: 以Click Listener?例
以「使用者狱碰(touch)」的?作?真,?View要?理使用者狱碰的事件?,就要向Android框架暂?View.OnClickListener事件毕?器;?「touch」事件办生?,Android框架便回呼事件毕?器彦的回呼函?。
View.OnClickListener是click listener,故名思意,呃是UI的「Click?作毕?器」;?使用者?View咄行Click操作?(即狱控?面上的UI 元件),Android 框架便?回呼呃?View.OnClickListener的回呼函?。
View.OnClickListerner的回呼函??OnClick()。
呃彦所提到的毕?器泛指event listener,主要用?「毕?」使用者的各肺?作。除了View.OnClickListener外,Android框架?有以下的event listener(及其callback method):
·View.OnL ongClickListener: onLongClick()
·View.OnFocusChangeListener: onFocusChange()
·View.OnKeyListener: onKey()
·View.OnTouchListener: onTouch()
·View.OnCreateContextMenuListener: onCreateContextMenu()另外一肺?理UI事件的?制?事件?理器(event handler),event handler陪event listener是不一?的二肺?理?制。在自?Android component的教?彦,再介铰呃?部份。
文章2:
如果玩过数独游戏,就会知道该游戏有时候非常容易,而有时候简直令人抓狂。因此,当用户选择New Game按钮时,就应该弹出一个对话框,要求用户从3个难度级别中选择一个。在Android中,从事件列表中选择某个事件非常容易实现。首先,需要在res/values/strings.xml文件中再添加几个字符串:
其次,使用数组资源在res/values/arrays.xml文件中创建难度列表:
然后,在Sudoku类中再导入几个包:
最后,在onClick()方法的switch语句中添加处理New Game按钮单击事件的代码:
其中,openNewGameDialog()方法的作用是创建一个处理难度列表的用户界面。
setItems()方法有两个参数:条目列表的资源ID和一个监听器,用户选择某个条目时,该监听器将被调用。
现在,运行该程序并按下New Game,将会出现如图3-12中所示的对话框。
图3-12 选择难度级别对话框
实际上,此时我们并不打算开始一次新游戏。因此,当用户选择某个难度级别时,该程序只是利用Log.d()方法输出一条调试消息。Log.d()方法接收两个参数:一个标记字符串和要输出的一条消息。
文章3:
Widget中事件监听器的实现
Widget中事件监听器的实现
widget中是没有click listener的,那么如何实现点击的动作呢?我们可以通过广播的形式来替代click linstener。
我们知道widget其实就是一个BroadcastReceiver,所以在AndroidManifest.xml中,注册一个新的action:
< receiver android:name="XXX">
< meta-data android:name="android.appwidget.provider"
android:resource="@xml/XXX">
< /meta-data>
< intent-filter>
< action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> < action android:name="com.android.CLICK">
< /intent-filter>
< /receiver>
代码中需要触发点击事件的地方发送一个广播:
Intent intent = new Intent("com.android.CLICK");
PendingIntent pi = PendingIntent
.getBroadcast(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.textview, pi);
在widget的onReceive() 方法中接收这个广播:
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
String action = intent.getAction();
if (action.equals("com.android.CLICK")) {
//TODO 处理点击事件
}
}
这样就完成了widget中的一次点击事件
TOP
文章4:
Reference/android/view/View
From Android中文网
Android中文网(https://www.360docs.net/doc/c710504686.html,) 版权申明 : creativecommons licenses
Jump to: navigation, search
android.view
公有类
android.view.View
https://www.360docs.net/doc/c710504686.html,ng.Object
android.view.View Drawable.Callback KeyEvent.Callback
视图(View)类代表了一种基本的用户界面组成模块。一个视图占据了屏幕上的一个矩形区域,并响应绘制图形和事件处理。视图类是窗体类(Widget)的基类,而窗体类用来生成可交互的用户图形接口(interactive GUI)。
视图类的使用窗口中所有的视图构成一个树形结构。要想增加视图,既可以用直接添加代码的方法,也可以在一个或者多个XML文件中声明新视图构成的树。在视图类的子类中,有的可以用来控制,有的具有显示文字、图片或者其他内容的功能。
当视图树被创建后,以下这若干种通用操作将可以被使用: 1.设置属性(properties):比如,可以设置TextView类的一个实例的文本内容。不同的子类可以用来设置的属性与方法不同。注意:只有编译时能够检测到的属性才可以在XML布局管理(layout)文件中设置。
2.设置输入焦点(focus):为了响应用户输入,整个框架将处理移动的焦点。如果想把焦点强制指向某一个特定的视图,必须调用requestFocus()方法。
3.设置监听器(listener):在视图中,允许设置监听器来捕获用户感兴趣的某些事件。比如说,在所有的视图中,无论视图是获得焦点还是失去焦点,都可以通过设置监听器来捕获。可以通过调用setOnFocusChangeListener(View.OnFocusChangeListener)来注册一个监听器。在其他视图子类中,提供了一些更加特殊的监听器。比如,
一个按键(Button)可以触发按键被按下的事件。
4.设置是否可视(visibility):可以通过调用setVisibility(int)来显示或者隐藏视图。
安卓按钮单击事件
第一种:匿名内部类作为事件监听器类 大部分时候,事件处理器都没有什么利用价值(可利用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适,实际上,这种形式是目前是最广泛的事件监听器形式。上面的程序代码就是匿名内部类来创建事件监听器的!!! 对于使用匿名内部类作为监听器的形式来说,唯一的缺点就是匿名内部类的语法有点不易掌握,如果读者java基础扎实,匿名内部类的语法掌握较好,通常建议使用匿名内部类作为监听器。 第二种:内部类作为监听器 将事件监听器类定义成当前类的内部类。1、使用内部类可以在当前类中复用监听器类,因为监听器类是外部类的内部类,2、所以可以自由访问外部类的所有界面组件。这也是内部类的两个优势。上面代码就是内部类的形式!! 第三种:Activity本身作为事件监听器
这种形式使用activity本身作为监听器类,可以直接在activity类中定义事件处理器方法,这种形式非常简洁。但这种做法有两个缺点:(1)这种形式可能造成程序结构混乱。Activity 的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱。(2)如果activity界面类需要实现监听器接口,让人感觉比较怪异。 上面的程序让Activity类实现了OnClickListener事件监听接口,从而可以在该Activity类中直接定义事件处理器方法:onClick(view v),当为某个组件添加该事件监听器对象时,直接使用this作为事件监听器对象即可。 第四种:外部类作为监听器 ButtonTest类 当用户单击button按钮时,程序将会触发MyButtonListener监听器 外部MyButtonListener类
AndroidUI基本控件与事件处理
《Android基础应用》 AndroidUI基本控件与事件处理 ?本章任务 ?使用Android开发本息计算器程序 ?使用Android开发华氏-摄氏温度转换器 ?本章目标 ?熟悉掌握本章基本控件的使用 ?熟练掌握Android常用事件 1.Android基本控件 Android应用开发的一项内容就是用户界面的开发,Android提供了大量功能丰富的UI组件,大部分放在android.widget包及其子包android.view包及其子包 在Android当中View类是最基本的一个UI类,基本上所有的高级UI组件都是继承View类而实现的。如Button(按钮),list(列表),EditText(编辑框),RadioButton(多选按钮),Checkbox(选择框)等都是View类 在Android中,我们可以在Xml文件中使用UI组件也可以在java文件中创建UI组件官方建议采用xml方式,这样的话能够实现界面和代码分离 1.1TextView和EditText TextView是一种用于显示字符串的控件 EditText则是用来输入和编辑字符串的控件,EditText是一个具有编辑功能的TextView
TextView和EditText基本属性 ●android:id设置ID,通过编码可以找到这个组件 ●android:layout_width设置在屏幕上的宽度 ●android:layout_height设置在屏幕上的高度 fill_parent强制性地使构件扩展,以填充布局单元内尽可能多的空间 wrap_content强制性地使视图扩展以显示全部内容 ●android:text设置显示的文本信息 ●android:textColor设置文本颜色 ●android:textSize设置文本尺寸
第5章Java图形界面编程与事件响应
5.1 抽象窗口工具集AWT 5.1 抽象窗口工具集AWT 设计Java图形用户界面(GUI, Graphics User 5.1 抽象窗口工具集AWT(续1完) java.awt AWT核心包,包括组件类,事件类等 5.2 Java图形类(续1) 5.4 容器与容器类组件 (1)容器有一定范围,容器一般都是矩形,容器范围边界可
5.4 容器与容器类组件(续1) 5.4 容器与容器类组件(续2完) 5.5 Java事件类(续1) 5.5 Java事件类(续2完) 5.6 Java事件响应机制 5.6 Java事件响应机制(续1)
5.6 Java事件响应机制(续2) 5.6 Java事件响应机制(续3) 5.6 Java事件响应机制(续4) 5.6 Java事件响应机制(续5) 5.6 Java事件响应机制(续6) 5.6 Java事件响应机制(续7)
5.6 Java事件响应机制(续8) 组件可以响应的事件 5.6 Java事件响应机制(续9) 5.6 Java事件响应机制(续10)例5.1一个多监听的例子。5.6 Java事件响应机制(续11) //第一个内嵌事件响应类 5.6 Java事件响应机制(续12) //第二个内嵌事件响应类5.6 Java事件响应机制(续13) //第三个内嵌事件响应类
5.6 Java事件响应机制(续14) public void display()5.6 Java事件响应机制(续15完) public static void main(String args[]) { C5_1 c=new C5_1(); c.display(); } Ch5-26 5.7 Java事件适配器 5.7 Java事件适配器(续1) Listener接口对应的Adapter抽象类 5.7 Java事件适配器(续2) 例5.2将例5.1改造成Adapter类事件处理方式。5.7 Java事件适配器(续3完) class MyEvent2 extends WindowAdapter
Java程序设计与实践教程 王薇主编 答案
第1章JAVA简介 一、判断题 1.√ 2.√ 3.? 4.? 5.? 6.√ 7.√ 8.√ 9.? 10.? 二、填空题 1.Application Applet 2. 类(字节码文件、目标文件) .class 3.对象 4. 主 5. J2SE J2EE J2ME 三、选择题 1.B 2. D 3.B 4.B 5. A 四、简答题 1.参考答案 Java语言是简单的、面向对象的、分布式的、健壮的、安全的、体系结构中立的、可 移植的、编译解释型的、高性能的、多线程的、动态的等等。 2.参考答案 Java程序执行的具体过程如图1所示。 图1 Java程序的运行机制 3.参考答案 Java程序在计算机在执行要经历以下几个阶段: (1)使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境 (JCreater、Eclipse、MyEclipse等)编辑Java源文件,其文件扩展名为.java。 (2)通过编译使.java的文件生成一个同名的.class文件。 (3)通过解释方式将.class的字节码文件转变为由0和1组成的二进制指令执行。 在以上阶段中可以看出Java程序的执行包括了编译和解释两种方式。 第2章Java 语法基础 一、判断题
1. ? 2.√ 3. ? 4.? 5.? 二、填空题 1.10 2. 单精度双精度 3. n%13 !=0?false:true 4.接口 5. false 三、选择题 1.D 2. C 3.D 4.A 5. C 第3章程序流程控制 一、判断题 1.错误 2.? 3.? 4.? 5.√ 二、填空题 1.循环 2. if 3.case switch 4. while do-while 5. continue 三、选择题 1.D 2. C 3.C 4.B 5. C 第4章数组 一、判断题 1. ? 2. √ 3. √ 4. √ 5.? 二、填空题 1.类型 2. new 3.长度 4. 分配空间 5. 3 6 9 三、选择题 1.D 2. A 3.C 4.B 5. B 第5章类和对象 一、判断题 1.√ 2.√ 3.? 4.? 5.√ 6.? 7.√ 8.? 9.? 10.√ 11.√ 12.√ 13.? 14.? 15. ? 二、填空题 1.public default 2. class 属性方法 3.public static void main(String args[]){} 4. new
实验五Java事件处理
实验五Java事件处理 实验目的 1.掌握Java语言中的事件处理方法 2.掌握Java语言中事件源、监视器和处理事件的接口的概念 实验内容 1.图形用户界面设计程序(ArtFo nt.java) 在实验三第1题的基础上,添加事件处理机制,并逐步完善程序功能。分别用ArtFont 类的对象做监视器和匿名内部类的对象做监视器实现。 要求实现如下功能: 当在文本框中输入文字后回车,在文本域中显示输入的文字。当分别选择粗体和斜体 复选框时,文本域中的文字分别显示粗体和斜体样式。 当点击颜色按钮时,出现颜色选择对话框,选择需要的颜色,按确定按钮后,按钮的 前景色和文本域的前景色设置为选定的颜色。 当选择字体样式下拉框中的某一字体样式时,文本域中的文字设置为指定的字 体样式。 当选择字体大小下拉框中的某一字体大小时,文本域中的文字设置为指定的字 体大小。 当选择窗体样式下拉框中的某一窗体效果时,窗体外观改变为指定的窗体外观。 图1程序界面运行效果 package Sy; import java.awt.*; import java.awt.event.*;
import javax.swing.*; public class ArtFont extends JFrame { static ArtFont artFont; JComboBox fontType;// 字体样式下拉框 JComboBox fontSize;// 字体大小下拉框 JComboBox windowStyle;// 窗体样式下拉框 JCheckBox boldBx;// 粗体按钮 JCheckBox italicBx;// 斜体按钮 JButton colorBtn;// 颜色按钮 String[] fontNames;// 字体名称 String[] fontSizes;// 字体大小 JLabel label;// 输入提示标签 JTextField inputText;// 文字输入框 JTextArea txtArea;// 文字显示区 JPanel northPanel;// 字体设置 JPanel centerPanel;// 显示效果区 JPanel southPanel;/样式设置 Font font; int boldStyle, italicStyle; int fontSizeStyle; String fontNameStyle; Color colorStyle = Color.black;// 设置字体的默认颜色为黑色 String[] style = { "默认显示效果 ", "Windows 显示效果 ", "Unix 显示效果 " }; public ArtFont() { super(”字体设置"); // 设置默认字体 boldStyle = 0; italicStyle = 0; fontSizeStyle = 10; fontNameStyle = "宋体 ";
Android OnTouchListener触屏事件接口
Android OnTouchListener触屏事件接口 OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。该接口中的监听方法签名如下。 Java代码: public boolean onT ouch(View v, MotionEvent event) 参数v:参数v同样为事件源对象。 参数event:参数event为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息。 节中介绍了一个在屏幕中拖动矩形移动的案例,本节将继续采用该案例的思路,通过监听接口的方式实现在屏幕上拖动按钮移动的案例。开发步骤如下。 创建一个名为Sample的Android项目。 准备字符串资源,打开strings.xml文件,用下列代码替换原有代码。 Java代码:
Java代码:
2019年Java高级程序设计期末复习题
Java高级程序设计第二学期期末复习题 一、判断题 1. 是对象可以序列化接口。(√) 2. 包是Java语言用来构建图形用户界面(GUI)的类库。(√) 3. 容器是Component的子类,一个容器可以容纳多个构件,并使他们成为一个整体。(√) 4. Java中所有的类都是通过直接或间接地继承类得到的。(√) 5. Java的图形用户界面的最基本的组成部分就是构件(Component)。(√) 6. 在Swing中用重量级的构件替代了AWT中的轻量级的构件。(X) 7. 与AWT构件不同,Swing构件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(contentPane)上。(√) 8. 类Panel默认的布局管理器是GridLayout。(X) 9. 每个Java小应用程序必须定义为Jframe类的子类。(√) 10. 使用UDP通信时,用DatagramPacket类把要发送的信息打包。(√)11.AWT组件称为重型组件(√) 组件称为轻型组件(√) 13.容器类不是GUI组件(X) 14.使用add方法可以在框架的内容窗格中添加组件(√) 是最简单的布局管理器(√) 16.布局管理器GridLayout不是以网格(矩阵)的形式排列组件(X) 17.布局管理器的属性不可以动态的改变(X) 18.每一时刻,一个容器只能有一个布局管理器(√) 19.要创建一个用户界面,需要创建一个框架或applet来存放用户界面组件(√)类是所有用户界面的父类(√) 21. JFrame实例可以添加到容器中。( F ) 22. JCheckBox继承了AbstractButton类的所有属性。( T ) 23. JTextArea可以让用户输入多行文字。( T ) 24. JSlider与JScrollbor类似,但是JSlider具有更多的属性和更多是显示形式。( T ) 类继承了JTextComponent类,而JTextComponent类继承JComponent类。( T ) 26. 从应用程序创建一个子窗口,不用先创建JFrame的一个子类。( F ) 27. 在一个文本域中按下回车键就触发了ActionEvent事件。( T ) 28. Java使用事件委托处理模型来处理事件,源对象和监听对象可以是同一个对象。( T ) 29. JDBC是指Java程序与数据库连接的一种机制。( T ) 30.可以给一个面板添加框架。(F ) 31. File类提供实现文件读写的操作方法。(T) 32. 时一个读取字符的类。(T) 33.垂直文本位置指定文本相对于图标的垂直位置。(T) 34.不可以同时设置按钮上的文本和图标。(F) 35.标签是显示一小段文字、一幅图片或者二者皆有的区域。(T) 36.组合框是包含项目的一个列表,用户可以从中进行选则。(T)
android简单的广播事件处理
广播事件处理 一.Broadcast Receiver 比如打电话等等; 广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别,而广播事件处理机制是系统级别。 二.使用Broadcast Receiver 1.编写类继承BroadcaseReceiver,复写onReceiver()方法 2.在AndroidManifest.xml文件中注册BroadcaseReceiver 3.构建Intent对象 4.调用sendBroadcase()方法发送广播 三.BroadcaseReceiver生命周期 BroadcastReceiver对象仅在调用onReceive()方法时有效,当该方法执行完毕后,系统认为销毁该对象。 四.标准广播Action 五.注册Broadcast Receiver的方法 1.在AndroidManifest.xml文件中进行注册//有缺陷,不会因为Activity被销毁而销毁,一般不用
java 按钮事件
代码如下,注意注释: import java.awt.Container; import java.awt.event.*; import javax.swing.*; public class ShortTest2 extends JFrame implements ActionListener { JButton jb1; JPanel j1; public ShortTest2() { Container contentPane = this.getContentPane(); j1 = new JPanel(); jb1 = new JButton("Draw"); jb1.addActionListener(this); j1.add(jb1); contentPane.add(j1, "North"); } public static void main(String[] args) { ShortTest2 m = new ShortTest2(); m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); m.setSize(600, 370); m.setLocationRelativeTo(null); m.setVisible(true); } public void actionPerformed(ActionEvent ae) { //主要是这里,按钮一按就执行下面的代码 JOptionPane.showMessageDialog(null, "Hello World!"); } } java点击按钮,出现另一个窗口 第一个窗体LoginFrame.java:
Android进阶——Android事件分发机制之dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent
Android进阶——Android事件分发机制之dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent 前言 Android事件分发机制可以说是我们Android工程师面试题中的必考题,弄懂它的原理是我们避不开的任务,所以长痛不如短痛,花点时间干掉他,废话不多说,开车啦 Android事件分发机制的简介 Android事件分发机制的发生在View与View之间或者ViewGroup与View之间具有镶嵌的视图上,而且视图上必须为点击可用。当一个点击事件产生后,它的传递过程遵循如下顺序:Activity->Window->View,即事件先传递给Activity,再到Window,再到顶级View,才开始我们的事件分发 Android事件分发机制的相关概念 Android事件分发机制主要由三个重要的方法共同完成的 dispatchTouchEvent:用于进行点击事件的分发 onInterceptTouchEvent:用于进行点击事件的拦截 onTouchEvent:用于处理点击事件 这里需要注意的是View中是没有onInterceptTouchEvent()方法的 Android事件分发机制的分发例子 这里以两个ViewGroup嵌套View来演示,下面是演示图 一、MyView 继承View并覆写其三个构造方法,覆写dispatchTouchEvent和onTouchEvent,前面已经说
了View是没有onInterceptTouchEvent方法的 public class MyView extends View { public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent event) { System.out.println("MyView dispatchTouchEvent"); return super.dispatchTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { System.out.println("MyView onTouchEvent"); return super.onTouchEvent(event); } } 二、MyViewGroup01和MyViewGroup02 MyViewGroup01和MyViewGroup02是一样的代码,这里以01为例,继承ViewGroup并覆写其三个构造方法,覆写dispatchTouchEvent和onTouchEvent和onInterceptTouchEvent方法 public class MyViewGroup01 extends LinearLayout { public MyViewGroup01(Context context) { super(context); } public MyViewGroup01(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MyViewGroup01(Context context, AttributeSet attrs) {
JAVA复习题(有答案)
复习题 一、选择题 1、下列Java标志符中合法的是:() A H3_sum B -name C student# D 9_Hello123 源文件和编译后的文件扩展名分别为() \ A. .class和.java B. .java和.class C. .class和.class D. .java和.java 3.对于同一消息,对象可以产生不同的行为,这称为类的什么特性()A)继承性B)封装性C)多态性D)抽象性 4、用来引入包语句的关键词是:() A)import B)abstract C)package D)extends ) 5.对于小程序,当离开包含Applet的主页后又再返回时将调用()方法。A)start( ) B)init( ) C)destroy( ) D)stop( ) 6.下列对Java中的继承描述错误的说法是() A.子类只能有一个父类 B.子类可作为另一个子类的父类 < C.子类可以访问父类的私有属性 D.子类继承父类的方法访问权限保持不变 7.哪种循环在条件表达式被计算之前至少执行循环体语句一次( ) A)do-while循环B)for循环C)while循环D)以上都不是8.定义数组String[] a={"ab","abc","abcd","abcde"},数组中a[1]指的是()。¥ D.数组越界 9.如果希望组件从左往右,从上到下自动布局界面,应使用哪种布局()A)没有B)BorderLayout C)FlowLayout D)GridLayout 10.下列说法正确的是() A. 最终类在特殊情况下可以有子类 B. 抽象类只能有一个子类 ] C. 多态可以通过方法重写和方法重载实现 D. 抽象类不可以声明成员变量和成员方法,只能声明抽象方法 11.下列语句中访问类的方法正确的是:() A)B)( ) C)book->name D)book_name 12.下列选项中哪个是类Pen的构造方法() $ A)public void Pen() {} B)public static Pen() {}
Android广播事件处理闹钟实例
Android广播事件处理闹钟实例 对应AlarmManage有一个AlarmManagerServie服务程序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册下来的各类闹铃并适时的设置即将触发的闹铃给闹铃设备(在系 统中,linux实现的设备名为”/dev/alarm”),并且一直监听闹铃设备,一旦有闹铃触发或 者是闹铃事件发生,AlarmManagerServie服务程序就会遍历闹铃列表找到相应的注册闹铃并 发出广播。该服务程序在系统启动时被系统服务程序system_service启动并初始化闹铃设备(/dev/alarm)。当然,在JAVA层的AlarmManagerService与Linux Alarm驱动程序接口之间 还有一层封装,那就是JNI。 AlarmManager将应用与服务分割开来后,使得应用程序开发者不用关心具体的服务,而 是直接通过AlarmManager来使用这种服务。这也许就是客户/服务模式的好处吧。AlarmManager与 AlarmManagerServie之间是通过Binder来通信的,他们之间是多对一的关系。 在android系统中,AlarmManage提供了3个接口5种类型的闹铃服务。 3个接口: 1. // 取消已经注册的与参数匹配的闹铃 2. void cancel(PendingIntent operation) 1. 2. //注册一个新的闹铃 3. void set(int type, long triggerAtTime, PendingIntent operation) 4. //注册一个重复类型的闹铃 5. void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 6. //设置时区 7. void setTimeZone(String timeZone) 5个闹铃类型 public static final int ELAPSED_REALTIME 1. //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传 递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠 2. 时间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是 3
Java程序设计题目及答案(1)
Java程序设计题目及答案(1) 一、单选题 1:使用SQL语句从数据库中查询记录,应使用( A)。 A:SELECT B:INSERT C:DELETE D:UPDATE 2:Java的输入输出流可以分为(C )。 A:位流和文件流 B:位流和字节流 C:位流和字符流 D:文件流和字符流 3:下面( C)是Java语言中正确的标识符。 A:3com B:import C:that D:this 4:关于方法的说法( A)是正确的。 A:方法中的形参可以和方法所属类的属性相同 B:方法必须有形参 C:同类不同的方法中不能有同名的自变量,否则回产生不可预测的结果 D:没有返回值的方法可以用void来表示,也可以不加 5:面向对象的的方法与面向过程的方法最大的不同在于( B)。 A:以功能为中心 B:以数据为中心 C:以功能和数据为中心 D:以事件驱动为中心 6:创建字符串s:String s=new String(“hello”);下面( D)语句将改变s。A:s.append(“aaa”); B:s.concat(s); C:s.substring(3) D:以上语句都不会 7:下列关于finally说法正确的是( C)。 A:finally语句应该放在所有例外控制器的最前面
B:如果程序在前面的例外控制器中匹配到了合适例外,就不再执行finally 语句了 C:无论程序是否找到合适的例外控制器,都会去执行finally语句 D:如果程序在前面的例外控制器中匹配到了多个合适的例外,就不再执行finally语句了 8:初始的HSB表示(A )。 A:Hue Saturation Brightness B:Hue Shadows Balance C:Han in the Sky with Diamonds D:以上都不对 9:下列关于Javabean的说法错误的是( C)。 A:Javabean必须是一个公共类(public) B:Javabean必须有一个公共类(public)的无参数的构造方法 C:Javabean中的属性必须是公共的(public) D:Javabean通常要作为某些事件的事件源或监听器 10:下列( C)语句是加载JDBC驱动程序的语句。 A:Statement SQL语句变量=连接变量.createStatement( ) B:Connection 连接变量=DriverManager.getConnection(数据库URL,用户帐号,用户密码) C:Class.forName(JDBC驱动程序名) D:连接变量.close() 11:要画一个左上角顶点是(100,100),右下角顶点是(200,200)的矩形,下面哪个命令是正确的是(C )。 A:drawRect(100,100,200,200) B:drawRect(200,200,100,100) C:drawRect(100,100,100,100) D:drawRect(100,100) (200,200) 12:下面(D )组件把用户的输入当整数类型存储。 A:JTextArea B:JButton C:JTextField D:都不是 13:JavaBean主要指组件的开发,(A )用于图形界面。 A:可以 B:不可以 C:因系统不同而不同 D:不知道
主动发送事件 android
Testing和Instrumentation Android提供了一系列强大的测试工具,它针对Android的环境,扩展了业内标准的JUnit测试框架。尽管你可以使用JUnit 测试Android工程,但Android工具允许你为应用程序的各个方面进行更为复杂的测试,包括单元层面及框架层面。Android测试环境的主要特征有: ●可以访问Android系统对象。 ●Instrumentation框架可以控制和测试应用程序。 ●Android系统常用对象的模拟版本。 ●运行单个test或test suite的工具,带或不带Instrumentation。 ●支持以Eclipse的ADT插件和命令行方式管理Test和Test工程。 这篇文章是对Android测试环境和测试方法的简要介绍,并假设你已经拥有一定的Android应用程序编程及JUnit测试的经验。概要 Android测试环境的核心是一个Instrumentation框架,在这个框架下,你的测试应用程序可以精确控制应用程序。使用Instrumentation,你可以在主程序启动之前,创建模拟的系统对象,如Context;控制应用程序的多个生命周期;发送UI事件给应用程序;在执行期间检查程序状态。Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。 通过在测试工程的manifest文件中添加
SUN JAVA 程序员复习题1 3
Sun Java程序员模拟题(1) 1.JDK由组成以下哪几部分组成?(选三项)ABD A.Java编程语言 B.工具及工具的API C.Java EE扩展API D.Java平台虚拟机 5.下列有关main()方法的签名正确的是哪些?(选两项)AC A.public static void main(String[]args){} B.public static void main(){} C.public static void main(String args[]){} D.public void static main(String[]args){} 22.下列关于继承优点的叙述正确的是哪几项?(选三项)ABC A.可以创建更为特殊的类型 B.消除重复代码 C.便于维护 D.执行效率高 35.Java语言中提供了哪些元素来支持封装?(选三项)ACD A.class语句 B.new语句 C.package语句 D.访问修饰符 36.下列哪些访问修饰符是在子类中可见的?(选两项)CD A.private B.default C.protected D.public (访问权限逐步增大) 38.下列有关抽象方法叙述正确的是哪项?(选两项)BC A.抽象方法和普通方法一样,只是前面多加一个修饰符asbtract B.抽象方法没有方法体 C.包含抽象方法的类的具体子类必须提供具体的覆盖方法 D.抽象方法可以包含在任何类中 39.public class TestDemo{ private int x=2;
static int y=3; public void method(){ final int i=100; int j=10; class Cinner{ public void mymethod(){ //Here } } } } 在Here处可以访问的变量是哪些?(选三项)ABC A.x B.y C.i D.j 45.关于try...catch...finally结构,描述正确的是哪项?(选两项)AD A.可以有多个catch B.只能有一个catch C.finally必须有 D.可以没有catch 1.以下哪些包是Java标准库中常用的包?(选三项)BCD A.javax.servlet.http https://www.360docs.net/doc/c710504686.html,ng基本包 C.java.util工具包 D.java.sql数据库操作包 16.现有:BCE 1.class Synapse{定义一个父类 2.protected int gap(){return7;} 3.} 4. 5.class Creb extends Synapse{定义一个子类 6.//insert code here覆盖父类中的方法,要求:访问权限大于等于父类中该方法的访问权限。//访问权限修饰符从高到低为:public protected default(不写)private
JAVA事件(台湾)
Java講座(七) Java and Event Handling 圖文?李盈嫻( Luna Lee ) 一、前言 在上一個章節,我們做出了美美的圖形使用者介面,可是,我們做的圖形介面要怎樣才能跟使用者產生互動呢?例如當使用者按下按鈕或移動滑鼠時,程式要做出什麼相對應的動作,畫面會產生什麼變化等等。在此,我們就要藉由『Event Handling』的觀念來完成。本章將會介紹Event的基本觀念,Listener的實作方法,最後並應用到聊天室的範例上。 二、內容 什麼是Event 當我們在寫程式時,多半會需要與使用者互動或回應其指令。在古早古早的以前,若有一支程式想要回應使用者按下滑鼠的動作,可能得要辛苦的寫一大堆code自己去抓相關的資訊。例如,在這支程式被initial 了之後,就要有一支迴圈不斷地去檢查使用者的滑鼠到底被按下去了沒有。這種polling programming的方法,一來浪費系統資源,二來所有要處理的回應與動作都在一個大迴圈中而顯得複雜了許多。 而Java的AWT則採用event-driven programming的方法來達成此目的,當某個特定的事件發生,就會驅動程式去執行某些特定的動作,而可與使用者產生即時的互動。其中有三個要素: ?Event – 意指某個特定的事件、動作,也就是「發生了什麼事件」。例如:視窗關閉、滑鼠移動。 ?Event Source – 產生、觸發事件的元件。例如:Button、TextField。?Event Handler – 負責接收Event object並作處理的Method。 在Java中把Events以物件來表示,並依type分類為不同的classes。有些負責表示較高階的事件(元件本身狀態或內容的改變),如ActionEvent、TextEvent;有些則表示較低階的事件(元件與環境間的溝通,像鍵盤或滑鼠相關的動作),例如KeyEvent、MouseEvent。而除DocumentEvent外,所有event classes的super class皆為java.util.EventObject。 我們在(圖1) 列舉了一些在GUI程式設計中常見,重要的Event classes及其階層關係。(讀者若有需要,也可自行查閱Java API,看看還有哪些Event classes可用。 ) 圖1
Android开发触屏事件的获取和触摸屏幕位置
Android开发-触屏事件的获取和触摸屏幕位置 在修改后的工厂测试程序中,用到了关于触摸事件的获取,顺便学习关于触摸事件和触摸位 Java代码 1.publicbooleanonTouchEvent(MotionEventevent){ 2. 3.//获得触摸的坐标 4.floatx=event.getX(); 5.floaty=event.getY();switch(event.getAction()) 6.{ 7.//触摸屏幕时刻 8.caseMotionEvent.ACTION_DOWN: 9. 10.break; 11.//触摸并移动时刻 12.caseMotionEvent.ACTION_MOVE: 13. 14.break; 15.//终止触摸时刻 16.caseMotionEvent.ACTION_UP: 17.break; 18.} 19.returntrue; 20.} 的知识,其方法如下: 关于publicbooleanonTouchEvent(MotionEventevent)方法: 参数event:参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。 返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。 该方法并不像之前介绍过的方法只处理一种事件,一般情况下以下三种情况的事件全部由onTouchEvent方法处理,只是三种情况中的动作值不同。 屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重新该回调方法,然后在方法中进行动作的判断即可。 屏幕被抬起:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。当MotionEvent.getAction()的值为MotionEvent.ACTION_UP时,表示是屏幕被抬起的事件。 在屏幕中拖动:该方法还负责处理触控笔在屏幕上滑动的事件,同样是调用MotionEvent.getAction()方法来判断动作值是否为MotionEvent.ACTION_MOVE再进行处理。