Java第06章--2(布局与事件处理)
- 格式:pdf
- 大小:229.36 KB
- 文档页数:35
Java的事件处理机制是一种用于处理用户界面事件和输入事件的机制。
它允许程序员注册事件监听器并定义事件处理程序,以便在特定事件发生时自动调用这些处理程序。
在Java中,事件处理涉及三个主要组件:事件源:这是事件发生的对象,例如按钮或文本框。
事件监听器:这是实现了特定事件监听器接口的对象,该接口定义了事件发生时要调用的方法。
事件处理程序:这是在事件发生时自动调用的方法。
Java提供了许多预定义的事件监听器接口,例如ActionListener、KeyListener、MouseListener等,这些接口在java.awt和javax.swing包中定义。
要处理事件,程序员需要执行以下步骤:创建事件源对象,例如按钮或文本框。
创建实现了相应事件监听器接口的对象。
将事件监听器添加到事件源中。
这通常通过调用事件源的addXXXListener()方法完成,其中XXX是监听器接口的名称(例如ActionListener)。
在实现的事件监听器接口的方法中编写事件处理代码。
这些方法通常具有与接口名称相同的方法名,并在方法签名中包含事件源作为参数。
例如,ActionListener 接口定义了一个actionPerformed()方法,该方法在按钮被单击时被调用。
当事件发生时,事件源将自动调用相应的事件监听器方法,并传递一个包含有关事件信息的Event对象作为参数。
事件监听器方法可以根据需要使用此Event对象来获取有关事件的详细信息。
总之,Java的事件处理机制是一种灵活和可扩展的机制,它允许程序员轻松地处理各种用户界面和输入事件。
通过使用预定义的事件监听器接口和实现相应的方法,程序员可以轻松地编写事件处理代码,并确保在需要时自动执行它们。
java事件处理机制的基本原理
Java事件处理机制是基于事件监听器(EventListener)和事件
源(EventSource)的机制。
事件源是触发事件的对象,例如按钮、窗口等。
当事件源上发生某个事件时,事件源会创建一个对应的事件对象,并将该事件对象传递给监听器。
事件监听器是处理特定事件的对象,它实现了对应事件监听器接口。
例如,按钮点击事件的监听器需要实现ActionListener
接口。
当事件源触发事件时,它会将该事件对象传递给所有注册了监听器的对象,监听器会根据事件对象中的信息执行相应的操作。
基本原理如下:
1. 事件源注册监听器:事件源通过调用addXXXListener()方法,将监听器注册到事件源上。
2. 事件源触发事件:当事件源上发生了特定事件(例如按钮被点击),它会创建一个对应的事件对象,并将该事件对象传递给所有注册了监听器的对象。
3. 监听器接收事件:注册了监听器的对象会收到事件对象,并根据事件对象中的信息执行相应的操作。
4. 事件处理:监听器根据事件对象中的信息,执行一系列操作来处理事件。
事件处理机制的优点是低耦合性和可扩展性。
事件源和监听器
是通过接口进行交互,使得它们之间没有强制的依赖关系,从而实现了低耦合性。
同时,事件监听器机制支持多个监听器同时监听同一个事件源,可以方便地扩展和修改事件的处理方式。
第6章习题解答1.简述Java中设计图形用户界面程序的主要步骤。
对于设计图形用户界面程序而言,一般分为两个步骤:第一步,设计相应的用户界面,并根据需要对相关的组件进行布局;第二步,添加相关的事件处理,如鼠标、菜单、按钮和键盘等事件。
2.试说明容器与组件之间的关系。
组件(component)是图形用户界面中的各种部件(如标签、按钮、文本框等等),所有的组件类都继承自JComponent类。
容器(container)是用来放置其他组件的一种特殊部件,在java中容器用Container类描述。
3.阅读下面程序,说明其运行结果和功能。
//filename:MyFrame.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class MyFrame{public static void main(String agrs[]){JFrame f=new JFrame("简单窗体示例");f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JLabel l=new JLabel("习题1");f.getContentPane().add(l,BorderLayout.CENTER);f.pack();f.setVisible(true);}}程序的运行结果如下:4.阅读下面程序,说明其运行结果和功能。
//filename:TestButton.javaimport java.awt.*;import javax.swing.*;public class TestButton extends JFrame{JButton b1,b2;TestButton(String s){super(s);b1=new JButton("按钮1");b2=new JButton("按钮2");setLayout(new FlowLayout());add(b1);add(b2);setSize(300,100);setVisible(true);}public static void main(String args[]){ TestButton test;test=new TestButton("测试按钮"); }}程序的运行结果如下:5.阅读下面程序,说明其运行结果和功能。
Java中的GUI界面设计和事件处理入门一、引言Java是一种面向对象的编程语言,具有广泛的应用领域。
在软件开发过程中,GUI界面设计和事件处理是非常重要的一部分。
本文将介绍Java中的GUI界面设计和事件处理的入门知识,以帮助读者了解和掌握这方面的技术。
二、GUI界面设计基础GUI(Graphical User Interface,图形用户界面)是指通过图形、图像和动画等方式来显示信息,提供用户与计算机之间的交互。
在Java中,可以使用Swing和JavaFX等库来进行GUI界面设计。
1. 布局管理器在GUI界面设计中,布局管理器用于管理组件的布局方式。
Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout和GridBagLayout等。
使用不同的布局管理器可以实现不同的界面布局效果。
2. 组件组件是GUI界面的基本元素,可以是按钮、文本框、标签、列表框等。
在Java中,可以使用JButton、JTextField、JLabel和JList等类来创建各种组件。
可以设置组件的属性,如大小、位置和样式等。
3. 事件监听器事件监听器用于捕捉用户操作产生的事件,并做出相应的处理。
在Java中,可以使用addActionListener()方法为组件添加监听器,响应用户的点击事件。
事件监听器可以以匿名内部类的形式实现,也可以作为单独的类来处理。
三、GUI界面设计实例下面以一个简单的登录界面为例,介绍如何使用Java中的GUI 界面设计来创建一个具有交互功能的窗体。
1. 导入必要的类库首先需要导入javax.swing和java.awt等类库,以便使用其中的类和方法。
2. 创建窗体可以通过继承JFrame类来创建一个窗体对象,然后设置窗体的标题、大小和关闭方式等属性。
3. 添加组件可以使用JLabel、JTextField和JButton等组件类来创建对应的界面元素,并设置它们的属性和布局。
Java中的事件处理模式是指在Java应用程序中处理用户交互或其他外部事件的方法和技术。
事件处理是构建交互性应用程序的关键部分,通过事件处理模式,可以使应用程序响应用户的操作,同时实现应用程序与外部环境的交互。
1. 事件处理模式的概念事件是指在程序执行过程中发生的某种行为或状态改变,例如用户点击按钮、鼠标移动等操作,或者是系统产生的通知、数据更新等外部事件。
事件处理模式通常涉及事件的产生、传递、捕获、处理等过程,是一种在面向对象编程中常用的设计模式。
2. 事件的产生和传递在Java应用程序中,事件通常由用户操作或外部环境引发,例如用户点击按钮、输入文本等操作,或者系统发出的通知、更新等事件。
这些事件会被封装成事件对象,并通过事件传递机制传递给事件处理器。
3. 事件监听器事件监听器是事件处理模式中的重要组成部分,它负责捕获和处理特定类型的事件。
在Java中,事件监听器通常是一个接口,包括事件监听、事件处理等方法,应用程序可以通过实现事件监听器接口来处理特定类型的事件。
4. 事件处理器事件处理器是负责处理事件的组件,它通过注册监听器来捕获和处理特定类型的事件。
在Java中,事件处理器通常是一个类,包括注册监听器、事件分发、事件处理等方法,应用程序可以通过创建事件处理器来处理特定类型的事件。
5. 事件驱动编程事件处理模式常常与事件驱动编程结合使用,通过事件处理模式,应用程序可以实现事件驱动的交互性。
事件驱动编程可以使应用程序具有响应性,增强用户体验,同时降低系统资源的占用。
6. Java中的事件处理模式在Java中,事件处理模式通常通过监听器和适配器来实现。
事件监听器通常是一个接口,包括事件监听、事件处理等方法,应用程序可以通过注册监听器来捕获和处理特定类型的事件。
事件适配器是一种简化事件处理器的方式,通过适配器,应用程序可以选择性地实现感兴趣的事件监听方法,而无需实现所有监听方法。
Java提供了丰富的事件处理API和相关类库,使开发人员可以方便地实现事件处理模式。
Java的事件处理机制概念部分:1.事件:Event是一种消息对象,封装了与事件发生相关的信息,如操作键盘会引发KeyEvent事件,单击关闭按钮会引发WindowEvent事件,单击命令按钮或选择菜单项目会引发ActionEvent事件等等2.事件源:Event Source产生事件的对象,如命令按钮和单选按钮都是事件源,单击他们时,会引发ActionEvent事件单选按钮会产生ItemEvent事件。
3.事件监听器:Event Listener在事件发生时,事件源负责给予通知的一种对象。
接收到事件通知的监听器主动的对事件进行处理。
两件事:将自己注册给事件源;事件的处理4.事件处理器Event Handler事件处理方法,用来接受事件并处理事件的方法。
Java事件处理的步骤:1.类实现相应的事件监听器接口2.重写接口中抽象方法3.给事件源注册事件监听器【例题】关闭窗口的实现public class NotepadDemo{private Frame mainForm;private MenuBar mb;private Menu m1;private Menu m2;private MenuItem mExit;private MenuItem mi1;private MenuItem mi2;private ExitHandler eh;public NotepadDemo(){mainForm = new Frame();mb = new MenuBar();m1 = new Menu("文件(F)");m2 = new Menu("编辑(E)");mi1 = new MenuItem("新建 Ctrl + N");mi2 = new MenuItem("打开 Ctrl + O");mExit = new MenuItem("退出(X)");mainForm.setMenuBar(mb);mb.add(m1);mb.add(m2);m1.add(mi1);m1.add(mi2);m1.add(mExit);mainForm.setBounds(0, 0, 400, 300);eh = new ExitHandler();//注册事件监听器mExit.addActionListener(eh);mi1.addActionListener(eh);mi2.addActionListener(eh);//注册Form的关闭监听器mainForm.addWindowListener(eh);}public void NotepadShow(){mainForm.setVisible(true);}public static void main(String[] args) { NotepadDemo nd = new NotepadDemo();nd.NotepadShow();}//实现事件监听器接口class ExitHandler implements ActionListener,WindowListener{//重写其中的抽象方法public void actionPerformed(ActionEvent e) {if(e.getSource()==mExit){System.exit(0);}else if(e.getSource()==mi1){System.out.println("新建按钮被按下");}else if(e.getSource()==mi2){System.out.println("打开按钮被按下");}}public void windowActivated(WindowEvent arg0) {//激活窗口 P190}public void windowClosed(WindowEvent arg0) {//窗口关闭时}public void windowClosing(WindowEvent arg0) {//退出窗口System.exit(0);}public void windowDeactivated(WindowEvent arg0) { //窗口非激活时}public void windowDeiconified(WindowEvent arg0) { //窗口非图标化时}public void windowIconified(WindowEvent arg0) {//窗口图标化时}public void windowOpened(WindowEvent arg0) {//窗口打开时}}}【练习】两个窗体,每个窗体上各有一个按钮,当点击此按钮时显示另外一个窗体public class FrameChangeDemo {public int n = 1;Frame1 f1;Frame2 f2;public FrameChangeDemo(){f1 = new Frame1();f2 = new Frame2();}public static void main(String[] args) {FrameChangeDemo fcd = new FrameChangeDemo();}class Frame1 extends Frame{Button btn;public Frame1(){this.setBounds(0,0,400,300);btn = new Button("显示窗体2");btn.setBackground(Color.red);btn.addActionListener(new BtnHandle());this.add(btn);this.setTitle("窗体1");this.setVisible(true);}}class Frame2 extends Frame{Button btn;public Frame2(){this.setBounds(0,0,400,300);btn = new Button("显示窗体1");btn.setBackground(Color.green);btn.addActionListener(new BtnHandle());this.add(btn);this.setTitle("窗体2");this.setVisible(false);}}class BtnHandle implements ActionListener{public void actionPerformed(ActionEvent e) { if(n==1){f1.setVisible(false);f2.setVisible(true);n=2;}else if(n==2){f1.setVisible(true);f2.setVisible(false);n=1;}}}}。
第6章 类与对象复习题6.1 答: 略6.2答: 略6.3答: 构造方法 ShowErrors(int) 没有定义.原因是默认的构造函数是没有参数的.6.4答: 略6.5答: 变量c 没有初始化,也可以说是没有将对象引用到实例.即c 为null. 6.6 答: 构造函数A()没有定义.原因是类中有了有参的构造方法A(String s),但没有无参构造方法,而系统不会再提供默认的构造函数A()。
系统找不到默认的构造函数.在这种情况下,如果还要用A(),则需要重新定义. 6.7 答:构造函数C(double)没有定义.原因是默认的构造函数是没有参数的. 6.8 答:输出:false;原因是boolean 类型的变量如果没有初始化,则默认初始值为false; 6.9 答:方法x()没有定义;6.10答:略6.11答:略6.12答:输出:1.0;私有变量可以被类里的成员方法访问.6.13答:略6.14答:略6.15答:传递基本类型参数值的变化不能被带回,而引用类型参数的变化可以带回.输出: count is 101 times is 06.16答:After swap1 : circle1= 1.0 circle2=2.0After swap2 : circle1= 2.0 circle2=1.0课后答案网ww w.kh da w .c om6.17答:a[0]= 1 a[1]= 2 (a)a[0]= 2 a[1]= 1 (b)e1 = 2 e2= 1 (c)t1's i = 2 and j= 1 (d)t2's i = 2 and j= 1第四个值得注意,因为 i 为静态的,因此经过二次实例化后,i 就变成2了。
而j 是没有变的,一直为1。
6.18答:System.out .println(f.i);System.out .println(f.s ); f.imethod(); f.smethod ();System.out .println(Foo.s ); Foo.smethod ();但静态成员最好直接用类访问.像 System.out .println(f.s ); f.smethod ();6.19答:i + j is 23k is 2 j is 06.20答:不能在静态方法中调用非静态方法,不能在静态方法中调用非静态变量.反之可以.错误是:不能调用method1(),不能调用c.6.22答:错误没有,但会提出警告:p 不明确,这里应该用this.p;6.23答:第一个输出为:null,因为一个对象的默认值是null,而第二个输出有错,原因是没有将对象引用到实例,即dates[0]为空课后答案网ww w.kh da w .c om。
java的事件处理机制
Java的事件处理机制是一种用于处理用户与界面元素交互的方法。
当用户执行某些操作(如点击按钮、按下键盘或移动鼠标等)时,Java将触发一个相应的事件,然后系统将调用相应的事件处理程序来响应该事件。
Java的事件处理机制包括以下几个步骤:
1. 创建事件对象:当某个事件发生时,Java会创建一个对应的事件对象,该对象包含了事件的详细信息,如事件的类型、发生的时间和发生的位置等。
2. 注册事件监听器:事件监听器是用于监听特定事件的类。
当某个事件发生时,系统将自动调用该事件监听器的相应方法来处理该事件。
开发者需要在代码中注册事件监听器,以便在事件发生时能够处理它。
3. 事件分发:当某个事件发生时,系统将该事件对象分发给相应的事件监听器。
事件监听器将根据事件对象的类型和信息来决定如何处理该事件。
4. 事件处理:事件监听器将调用相应的方法来处理事件。
该方法通常在事件监听器类中定义,并实现了特定的事件处理逻辑。
5. 更新界面:在事件处理完成后,系统可能会更新界面以反映事件的结果。
例如,当用户点击一个按钮时,系统可能会显示一个对话框或更新一个文本框的内容。
Java的事件处理机制提供了灵活和可扩展的方式来处理用户与界面元素的交互。
通过使用事件监听器和事件处理程序,开发者可以轻松地编写出响应用户操作的代码,从而实现更加丰富的交互功能。
Java语言中的事件及事件处理在GUI界面程序中,为了使程序能够接收用户的命令,系统应该能够识别这些鼠标和键盘的操作(事件)并做出响应。
在此将讨论事件的产生和响应。
8.1 事件处理通常每一个键盘或鼠标操作会引起一个系统预先定义好的事件,程序只需要定义每个特定事件发生时应该做出的响应。
在Java中,除了键盘和鼠标操作外,系统的状态改变、标准图形界面元素等都可以引发事件。
8.1.1 事件事件处理对GUI界面的程序设计是必不可少的。
程序等候用户执行一些操作,用户通过GUI界面控制程序执行操作的顺序。
例如,在例7.3中创建了一个选课的GUI界面,使用鼠标选中所要的课程之后,单击按钮执行按钮事件处理程序,将选中的课程在文本框中显示。
这种方法就称为事件驱动程序设计。
1.事件组件一个事件包含以下3个组件:(1)事件对象在Java中,每一个事件(Event)都是对象。
Java.util.EventObjrct是所有事件对象的根类。
这里只介绍的事件对象只属于其中的一类。
这一类事件对象的根类是java.awt.AWTEvent,它是EventObject的直接子类。
从名称上可以看出这一类事件对象都是与用户界面有关的。
在java的定义中,每一个事件对象都有其事件发起者和事件使用者。
事件发起者对应了将要介绍的事件源,而事件使用者对应事件监听器。
同时,为了在使用事件时能够访问到事件源,在每一个事件对象中都保存了一个指向事件源的引用。
由于用户对组件的操作有所不同,因此java为这些不同类型的操作定义了相应的事件:当用户通过按键或单击鼠标与应用程序交互时,一个事件便产生了。
操作系统捕获该事件及与其相关的数据,例如,事件发生的时间和事件类型(按键、单击鼠标)。
然后,数据被传递给事件所属的应用程序处理。
(2)事件源顾名思义,事件源就是事件的源头,即事件产生的地方。
Java中的事件源种类很多,在此介绍的事件源指的是组件。
事件源是产生事件的对象。