




已阅读5页,还剩308页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计之网络编程(第2版),重庆大学计算机学院,教学课件,第1章 Java语言概述 第2章 数据类型及其运算 第3章 程序控制语句 第4章 面向对象程序设计基础 第5章 面向对象高级程序设计 第6章 字符串处理 第7章 Java标准类库 第8章 Java异常处理 第9章 输入输出处理 第10章 线程 第11章 GUI程序设计 第12章 Applet应用程序 第13章 JDBC 第14章 网络通讯,第11章 GUI程序设计,主要内容,11.1 JFC简介 11.2 Swing组件的结构 11.3 顶层容器类 11.4 布局管理 11.5 事件处理 11.6 Swing组件 11.7 图形编程 11.8 加载和使用多媒体资源,11.1 JFC简介,从Java 1.0(JDK 1.0)发布开始,AWT就是JDK的一部分,并且是GUI程序开发的主要技术。但随着开发人员将Java应用于越来越多的平台,AWT的弱点开始逐渐暴露。其中AWT最主要的问题是:AWT只提供了建立窗口操作应用程序所必需的最少功能,对于构建复杂的窗体程序(例如类似Word、PowerPoint一样的程序),AWT提供的功能是远远不足的。Sun公司很快的意识到了这个问题,并从JDK1.1开始对AWT类库进行改进。1997年4月,Sun公司的Java小组(JavaSoft)宣布使用Java Foundation Classes(Java基类,简称JFC)取代早期的AWT。JFC主要由AWT、Swing和Java2D组成,采用JFC能够开发界面更加丰富的GUI程序。,JFC提供了一组比AWT更为安全、更灵活和更易于移植的名为“Swing”的GUI组件。在Swing中不仅包括了AWT所具有的全部组件,而且可以使用树形组件(JTree)、表格(JTable)、选项卡(JTabbedPane)等计算机用户习惯的其他特性来设计界面 。,图11-1(a)不同外观风格的Swing程序,Java外观风格,图11-1(b)不同外观风格的Swing程序,Motif外观风格,图11-1(c)不同外观风格的Swing程序,Windows XP外观风格,图11-2使用Java2D的Swing程序,主要内容,11.1 JFC简介 11.2 Swing组件的结构 11.3 顶层容器类 11.4 布局管理 11.5 事件处理 11.6 Swing组件 11.7 图形编程 11.8 加载和使用多媒体资源,11.2 Swing组件的结构,11.2.1 类层次结构 11.2.2 MVC模式,Swing中的类主要分为两类,JComponent及其子类,称为Swing组件。Swing组件分为两类,一类是Swing自带的基础Swing组件,包括图11-3所示的JComponent及其全部子类。另一类是自定义组件,程序员可以通过继承JComponent及其子类创建自定义的Swing组件。Swing组件中有一部分组件具有图形外观能在图形界面上与用户进行交互,称为可视化组件,例如JButton、JLabel、JTextField等。Swing组件中的另外一些组件没有图形外观,称为非可视化组件。非可视化组件通常需要与可视化组件相结合,共同完成特定的图形功能。 顶层容器(container)。所谓容器,是指该Swing类能够包含其他的容器或Swing组件。顶层容器是容器中最顶层的,不能被其他容器所包含,但可以在其上放置其他的非顶层容器和Swing组件。顶层容器包含JApplet、JDialog、JFrame和JWindow及其子类。例如JFrame是描述窗体的顶层容器,在JFrame之上可以放置按键(JButton)、表格(JTable)、树形组件(JTree)等Swing组件,但不能在按键(JButton)之上放置JApplet或者JDialog及其子类。除了顶层容器,Swing中JComponent及其子类都具有容器的能力,都能够包含其他的容器或者Swing组件,但其显示效果是有差异的。例如JPanel(面板)是一种专用的轻量级容器类,在JPanel之上可以放置其他容器或者Swing组件,同时JPanel也可以被加入到其他的中间容器和顶层容器中,但JPanel不能包含顶层容器。原则上JButton也具有容器的能力,可以在JButton上包含其他的Swing组件,但是否能将添加的Swing组件显示出来,则是不确定的,11.2.1 类层次结构,图11-3 Swing的类层次结构,11.2 Swing组件的结构,11.2.1 类层次结构 11.2.2 MVC模式,11.2.2 MVC模式,Swing中的类在设计时采用了模型、视图、控制器(Model View Controller,MVC)模式作为每个组件的基本设计。MVC模式是GUI程序设计中比较常见的一种设计方法,因此理解MVC模式不仅有利于学习Swing,更有助于设计GUI程序。MVC模式将GUI组件拆分为模型、视图、控制器三个基本要素,每一个要素都对组件的表现起着至关重要的作用。,MVC,模型(Model)包含每个组件的数据状态,不同类型的组件有不同的模型。什么是组件的数据状态呢?例如滚动条组件(JScrollBar)的数据状态就包含滚动条的当前位置、最大值、最小值以及滚动条的宽度等。这些数据信息就是滚动条组件的模型。 视图(View)是组件在屏幕上的表现形式。由于Java是跨平台的语言,同一个组件在不同的平台上的显示是不相同的,在不同的外观风格下也是不相同的。为了让Java的GUI程序也应该做到“Write once,run anywhere”,Swing组件依据组件的模型和当前所处的显示环境进行组件绘制。 控制器(Controller)控制组件如何与事件进行交互。事件的形式有多种,例如鼠标单击、获得或者失去焦点、键盘点击等。当这些事件发生时,控制器根据事件的类型,决定组件如何响应,图11-4 MVC模式,主要内容,11.1 JFC简介 11.2 Swing组件的结构 11.3 顶层容器类 11.4 布局管理 11.5 事件处理 11.6 Swing组件 11.7 图形编程 11.8 加载和使用多媒体资源,11.3 顶层容器类,11.3.1 JFrame 11.3.2 JDialog、JWindow和JApplet,11.3.1 JFrame,JFrame是最常用的一种顶层容器,它的作用是创建一个顶层的Windows窗体。JFrame的外观就像平常windows系统下见到的窗体,有标题、边框、菜单等等。,【例11-1】使用JFrame类显示一个简单的窗体,import javax.swing.JFrame; public class JFrameDemo public static void main(String args) JFrame frame=new JFrame(); /JFrame实例化 frame.setSize(300,300); /设置窗体大小为300x300 frame.setLocation(400, 400); /设置窗体显示位置在(400,400) frame.setTitle(“JFrameDemo”); /设置窗体标题为 /设置关闭按键的默认操作 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); /显示窗体 ,【例11-2】使用继承方式创建窗体,import javax.swing.JFrame; public class MyFrame extends JFrame public MyFrame() setSize(300,300); /设置窗体大小为300x300 setLocation(400, 400); /设置窗体显示位置在(400,400) setTitle(“MyFrame“); /设置窗体标题为MyFrame /设置关闭按键的默认操作 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public static void main(String args) MyFrame myFrame=new MyFrame(); /MyFrame实例化 myFrame.setVisible(true); /显示窗体 ,【例11-3】 JFrame作为容器,import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; public class ButtonFrame extends JFrame private JButton button=new JButton(“按键“); public ButtonFrame() setSize(300,300); setLocation(400, 400); setTitle(“ButtonFrame“); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout(); /设置布局 add(button); /添加按键 public static void main(String args) ButtonFrame frame=new ButtonFrame(); frame.setVisible(true); ,【例11-3】容器中添加组件,11.3 顶层容器类,11.3.1 JFrame 11.3.2 JDialog、JWindow和JApplet,11.3.2 JDialog、JWindow和JApplet,JDialog是创建对话框的顶层容器类。JDialog的使用方式以及其所包含的方法和属性与JFrame都有许多类似。但JDialog创建的对话框与JFrame创建的窗体在外观上是不同的,例如对话框没有最大化和最小化按键。在GUI编程时可以根据需要选择使用JDialog还是JFrame。 JWindow也可以创建一个窗体容器,但是JWindow创建的窗体没有标题栏,没有最大化、最小化按键。在某些GUI应用中,可能需要编写这种不带修饰的窗体,或者用户希望用自己编写的标题栏、最大化、最小化按键来替换Windows自带的窗体风格,此时就可以选择通过创建JWindow来实现这些窗体效果。JWindow的使用方式以及其所包含的方法和属性与JFrame也基本类似。 Applet是一种能够嵌入到网页中执行的Java图形程序。JApplet是创建这种程序的顶层容器 。,主要内容,11.1 JFC简介 11.2 Swing组件的结构 11.3 顶层容器类 11.4 布局管理 11.5 事件处理 11.6 Swing组件 11.7 图形编程 11.8 加载和使用多媒体资源,11.4 布局管理,11.4.1 无布局管理器布局 11.4.2 FlowLayout 11.4.3 BorderLayout 11.4.4 GridLayout 11.4.5 其他布局管理器 11.4.6 复杂界面布局,11.4.1 无布局管理器布局,Swing提供了setLocation(),setSize(),setBounds() 等布局方法,但Swing的组件中存在一个默认的布局管理器,因此这些设置方法都会失效。如果需要设置组件大小或位置,则应取消该容器的布局管理器,方法为调用容器的setLayout方法,并将布局管理器设置为null。 相对于基于布局管理器的布局方式在对组件的大小和位置的控制上较为灵活,但这种布局方式会导致平台相关,在不同的平台上可能产生不同的显示效果。如果想让GUI程序以一致的外观在不同的平台上运行,则需要采用基于布局管理器的布局方式。,【例11-4】无布局管理器的布局,import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class AbsoluteLayoutDemo extends JFrame private JButton button=new JButton(“JButton“); private JTextField textField=new JTextField(“JTextField “); public AbsoluteLayoutDemo() setSize(300, 300); setLocation(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /设置布局管理为null setLayout(null);,/设置按键的位置为(20,20),宽100,高20 button.setLocation(20, 20); button.setSize(100, 20); add(button); /设置输入框的位置为(20,50),宽200,高100 textField.setBounds(20,50,200,100); add(textField); public static void main(String args) AbsoluteLayoutFrame frame=new AbsoluteLayoutFrame(); frame.setVisible(true); ,【例11-4】无布局管理器布局,11.4 布局管理,11.4.1 无布局管理器布局 11.4.2 FlowLayout 11.4.3 BorderLayout 11.4.4 GridLayout 11.4.5 其他布局管理器 11.4.6 复杂界面布局,11.4.2 FlowLayout,容器采用FlowLayout布局其组件的放置规律是从左到右、从上到下进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。 当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,其变化规律是:组件的大小不变,但是相对位置会发生变化。,【例11-5】 FlowLayout布局,import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; public class FlowLayoutDemo extends JFrame private JButton button1 = new JButton(“First Button“); private JButton button2 = new JButton(“Second Button“); private JButton button3 = new JButton(“Third Button“); private JButton button4 = new JButton(“Fourth Button“); public FlowLayoutDemo() setSize(300, 150); setLocation(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /设置布局方式为FlowLayout setLayout(new FlowLayout();,/添加按键,注意设置布局方式之后任何对 / /组件进行设置的方法,例如setSize、 /setLocation等都会失效 add(button1); add(button2); add(button3); add(button4); public static void main(String arg) FlowLayoutDemo frame = new FlowLayoutDemo(); frame.setVisible(true); ,【例11-5】 FlowLayout布局,默认运行,窗体大小改变后,11.4 布局管理,11.4.1 无布局管理器布局 11.4.2 FlowLayout 11.4.3 BorderLayout 11.4.4 GridLayout 11.4.5 其他布局管理器 11.4.6 复杂界面布局,11.4.3 BorderLayout,BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。如果使用了BorderLayout布局,当容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化。例如容器变高了,则North、South区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽。不一定所有的区域都有组件,如果四周的区域(West、East、North、South区域)没有组件,则由Center区域去补充。,【例11-6】 BorderLayout布局,import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; public class BorderLayoutDemo extends JFrame private JButton north = new JButton(“North“); private JButton south = new JButton(“South“); private JButton east = new JButton(“East“); private JButton west = new JButton(“West“); private JButton center = new JButton(“Center“); public BorderLayoutDemo() setSize(300, 300); setLocation(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,/设置布局方式为BorderLayout setLayout(new BorderLayout(); /添加按键,注意设置布局方式之后任何对 /组件进行设置的方法,例如setSize、 /setLocation等都会失效 add(north,BorderLayout.NORTH); add(south,BorderLayout.SOUTH); add(east,BorderLayout.EAST); add(west,BorderLayout.WEST); add(center,BorderLayout.CENTER); ,【例11-6】 BorderLayout布局,默认运行,窗体大小改变后,11.4 布局管理,11.4.1 无布局管理器布局 11.4.2 FlowLayout 11.4.3 BorderLayout 11.4.4 GridLayout 11.4.5 其他布局管理器 11.4.6 复杂界面布局,11.4.4 GridLayout,该布局管理器将整个容器划分成N行,M列的网格,平均占据容器的空间。布局时,按照组件加入的顺序优先考虑按行布局,当一行布局满之后再布局下一行(每行只能布局M个组件)。只有当行列不能满足指定的数值时(N x M小于组件个数),才按行扩展 。,【例11-7】GridLayout布局,import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; public class GridlayoutDemo extends JFrame private JButton button1 = new JButton(“First Button“); private JButton button2 = new JButton(“Second Button“); private JButton button3 = new JButton(“Third Button“); private JButton button4 = new JButton(“Fourth Button“); public GridlayoutDemo() setSize(300, 300); setLocation(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,/设置布局方式为GridLayout,2行,2列 setLayout(new GridLayout(2,2); /添加组件时不需要设置组件所在行、列 add(button1); add(button2); add(button3); add(button4); public static void main(String arg) GridlayoutDemo frame = new GridlayoutDemo(); frame.setVisible(true); ,【例11-7】GridLayout布局,默认运行,窗体大小改变后,11.4 布局管理,11.4.1 无布局管理器布局 11.4.2 FlowLayout 11.4.3 BorderLayout 11.4.4 GridLayout 11.4.5 其他布局管理器 11.4.6 复杂界面布局,11.4.5 其他布局管理器,CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用容器来实现复杂的用户界面。 GridBagLayout生成的布局管理器与GridLayout一样是使用网格来进行布局管理的,所不同之处在于GridBagLayout可以通过类GridBagConstraints 来控制容器内各个组件的大小。 SpringLayout是在JDK1.4中加入的布局管理器,该布局管理器功能强大,布局灵活,能够模拟其他布局管理器的布局。 JDK1.6加入了GroupLayout。它是以Group(组)为单位来管理布局,也就是把多个组件(如:JLable、JButton)按区域划分到不同的Group(组),再根据各个Group(组)相对于水平轴(Horizontal)和垂直轴(Vertical)的排列方式来管理。,11.4 布局管理,11.4.1 无布局管理器布局 11.4.2 FlowLayout 11.4.3 BorderLayout 11.4.4 GridLayout 11.4.5 其他布局管理器 11.4.6 复杂界面布局,11.4.6 复杂界面布局,复杂界面的布局往往非常复杂,单纯的使用一种布局管理器很难对Swing组件进行布局,因此在对复杂界面进行布局时往往需要将多种布局管理器进行组合使用 。,【例11-8】复杂界面布局,import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class ComplexLayoutDemo extends JFrame private JPanel panel1=new JPanel(); private JPanel panel2=new JPanel(); private JPanel panel3=new JPanel(); private JPanel panel4=new JPanel(); public ComplexLayoutDemo() setSize(500, 500); setLocation(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,/对panel1进行布局 layoutPanel1(); /对panel2进行布局 layoutPanel2(); /对panel3进行布局 layoutPanel3(); /对panel4进行布局 layoutPanel4(); /对顶层容器进行布局,采用GridLayout,2行,2列 setLayout(new GridLayout(2,2); add(panel1); add(panel2); add(panel3); add(panel4); ,private void layoutPanel1() JButton north = new JButton(“North“); JButton south = new JButton(“South“); JButton east = new JButton(“East“); JButton west = new JButton(“West“); JButton center = new JButton(“Center“); /panel1采用BorderLayout布局 panel1.setLayout(new BorderLayout(); panel1.add(north,BorderLayout.NORTH); panel1.add(south,BorderLayout.SOUTH); panel1.add(east,BorderLayout.EAST); panel1.add(west,BorderLayout.WEST); panel1.add(center,BorderLayout.CENTER); private void layoutPanel2() JButton button1 = new JButton(“First Button“); JButton button2 = new JButton(“Second Button“); JButton button3 = new JButton(“Third Button“); JButton button4 = new JButton(“Fourth Button“);,/panel2采用FlowLayout布局 panel2.setLayout(new FlowLayout(); panel2.add(button1); panel2.add(button2); panel2.add(button3); panel2.add(button4); private void layoutPanel3() JButton button1 = new JButton(“First Button“); JButton button2 = new JButton(“Second Button“); JButton button3 = new JButton(“Third Button“); JButton button4 = new JButton(“Fourth Button“); /panel3采用GridLayout布局,2行,2列 panel3.setLayout(new GridLayout(2,2); panel3.add(button1); panel3.add(button2); panel3.add(button3); panel3.add(button4); ,private void layoutPanel4() JButton button=new JButton(“JButton“); JTextField textField=new JTextField(“JTextField“); /panel2采用无布局管理器布局 panel4.setLayout(null); button.setLocation(20, 20); button.setSize(100, 20); textField.setBounds(20,50,200,100); panel4.add(button); panel4.add(textField); public static void main(String args) ComplexLayoutDemo frame=new ComplexLayoutDemo(); frame.setVisible(true); ,【例11-8】复杂界面布局,主要内容,11.1 JFC简介 11.2 Swing组件的结构 11.3 顶层容器类 11.4 布局管理 11.5 事件处理 11.6 Swing组件 11.7 图形编程 11.8 加载和使用多媒体资源,11.5 事件处理,11.5.1事件处理模型 11.5.2事件类 11.5.3事件监听器 11.5.4事件适配器 11.5.5 键盘与鼠标事件,11.5.1事件处理模型,Swing采用了委托(delegation)事件模型,也叫授权事件模型来处理系统发生的各类事件。授权事件模型是JDK1.1开始采用的事件处理模型,而在JDK1.1之前Java采用的是层次(hierarchal)模型 。 在授权事件模型中,主要包含了三个对象:事件:发生在用户界面上的用户交互行为所产生的一种效果。事件源:产生事件的对象。事件监听器:接受事件并对其进行处理的对象。 组件作为事件源可以触发事件,一个事件源注册一个或多个事件监听器。当特定事件发生时,事件被委托到具体的事件监听器进行处理。,委托事件模型具有优点,事件对象只传给注册的监听器,不会意外地被其他组件或上层容器捕获和处理。 可以实现过滤器的功能,只监听和处理感兴趣的事件。 实现了将事件源和事件监听器分开处理的功能。,编写事件处理程序,下面我们以JButton组件的单击事件为例,说明如何编写事件处理程序。 编写事件监听器 按键点击事件可以由实现了ActionListener接口的类进行处理。因此首先需要编写一个实现了ActionListener接口的类。 ActionListener接口中只有有唯一的方法: public void actionPerformed( ActionEvent e)参数ActionEvent e是对应点击事件的对象。通过调用该对象的方法可以获取事件的相关属性,例如调用getSource方法将返回事件发生的对象。程序员需要为该方法编写特定的事件处理代码。 为按键注册事件监听程序 为JButton注册事件监听程序,需要调用JButton的addActionListener方法: public void addActionListener (ActionListener handler)该方法能够接受一个实现了ActionListener接口的类。如果要对按键注册多个监听器,则需要编写多个事件监听器,并多次调用addActionListener方法,将每个监听器都注册到组件中。,【例11-9】简单按键事件,import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class EventDemo extends JFrame JButton button=new JButton(“press me“); public EventDemo() setSize(300,300); setLocation(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,/设置按键事件,使用了匿名类 button.addActionListener(new ActionListener() /获取被点击的按键 public void actionPerformed(ActionEvent e) JButton clickedButton=(JButton) e.getSource(); /改变被点击按键的标题 clickedButton.setText(“I have been pressed“); ); setLayout(new BorderLayout(); add(button,BorderLayout.NORTH); public static void main(String args) EventDemo frame=new EventDemo(); frame.setVisible(true); ,【例11-9】简单按键事件,点击前,点击后,11.5 事件处理,11.5.1事件处理模型 11.5.2事件类 11.5.3事件监听器 11.5.4事件适配器 11.5.5 键盘与鼠标事件,11.5.2事件类,在委托事件模型中,事件既是基础,又是联系各个部分的桥梁。首先,组件作为事件源产生事件,不同类型的组件会产生不同类型的事件。事件发生后,事件被传递给对应事件监听器中实现的事件处理方法,并且在事件中,包含着用户传递给系统的交互信息,如文本框中的输入内容等。不同类型的事件由不同的Java类来表示,基类是java.util.EventObject, 所有的事件都是从它继承而来的 。,图11-12 事件类结构图,11.5 事件处理,11.5.1事件处理模型 11.5.2事件类 11.5.3事件监听器 11.5.4事件适配器 11.5.5 键盘与鼠标事件,11.5.3事件监听器,接收事件并对事件做出相应反映的对象称为事件监听器。java.awt.event包中按照不同的事件类型定义了多个监听器接口,每类事件都有对应的事件监听器接口,接口中定义了事件发生时可调用的方法。,部分事件及其响应的监听器接口,11.5 事件处理,11.5.1事件处理模型 11.5.2事件类 11.5.3事件监听器 11.5.4事件适配器 11.5.5 键盘与鼠标事件,11.5.4事件适配器,采用实现监听器接口的方法时,不管你是否对相关事件进行处理,都必须实现所有这些方法,比如,你实现了WindowListener接口,你可能只对处理窗口关闭的windowClosing方法感兴趣,但是你不得不实现其余六个方法。事件适配器就是为了解决这一问题的。 使用适配器,只须重写需要实现的方法,无关方法不用实现,这简化了程序代码。同监听器不同的是,监听器是一个接口,而适配器是一个类,要使用适配器,就必须继承对应的适配器类。,java.awt.event包中定义的事件适配器类,ComponentAdapter( 组件适配器) ContainerAdapter( 容器适配器) FocusAdapter( 焦点适配器) KeyAdapter( 键盘适配器) MouseAdapter( 鼠标适配器) WindowAdapter( 窗口适配器),【例11-10】事件适配器的简单例子,mport java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JOptionPane; public class WindowClosingDemo extends JFrame public WindowClosingDemo() setSize(300,300); setLocation(400, 400); /设置默认关闭操作为:什么也不做 setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); /用WindowAdapter添加关闭事件,addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) /询问是否关闭窗口 int answer=JOptionPane.showConfirmDialog(null,“是否关闭窗口?”,“窗口消息 “,JOptionPane.YES_NO_OPTION); /如果回答“是”则关闭 if(answer=JOptionPane.YES_OPTION) System.exit(0); ); public static void main(String args) WindowClosingDemo frame=new WindowClosingDemo(); frame.setVisible(true); ,【例11-10】事件适配器的简单例子,11.5 事件处理,11.5.1事件处理模型 11.5.2事件类 11.5.3事件监听器 11.5.4事件适配器 11.5.5 键盘与鼠标事件,11.5.5 键盘与鼠标事件,键盘事件和鼠标事件是GUI程序中最常见的两类事件。与键盘事件相关的监听器是KeyListener,与鼠标事件相关的监听器包括:MouseListener、MouseMotionListener和MouseWheelListener。为了处理相应的事件,需要调用相应的addXXXlistener方法,添加相应的事件监听器。 键盘和鼠标事件还有对应的适配器KeyAdapter和MouseAdapter。,【例11-11】键盘事件处理,import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JLabel; public class KeyEventDemo extends JFrame JLabel label=new JLabel(“按下了按键:“); public KeyEventDemo() setSize(300,300); setLocation(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.addKeyListener(new KeyAdapter() public void keyPressed(KeyEvent event) switch(event.getKeyCode() case KeyEvent.VK_UP: label.setText(“按下了按键:UP“); break;,case KeyEvent.VK_DOWN: label.setText(“按下了按键:DOWN“); break; case KeyEvent.VK_LEFT: label.setText(“按下了按键:LEFT“); break; case KeyEvent.VK_RIGHT: label.setText(“按下了按键:RIGHT“); break; default: label.setText(“按下了按键:“+event.getKeyChar(); ); setLayout(new BorderLayout(); add(label,BorderLayout.CENTER); ,【例11-11】键盘事件处理,按下按键“d”,按下方向键“上”,【例11-12】鼠标事件处理,import java.awt.BorderLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import javax.swing.JFrame; import javax.swing.JLabel; public class MouseEventDemo extends JFrame JLabel label=new JLabel(“); public MouseEventDemo() setSize(300,300); setLocation(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent event) label.setText(“鼠标在“+event.getX()+“,“+event.getY()+“进行了点击“); );,this.addMouseMotionListener(new MouseAdapter() public void mouseMoved(MouseEvent event) label.setText(“鼠标移动到了“+event.getX()+“,“+event.getY(); ); this.addMouseWheelListener(new MouseAdapter() public void mouseWheelMoved(MouseWheelEvent event) label.setText(“鼠标滚轮进行了滚动“); ); setLayout(new BorderLayout(); add(label,BorderLayout.CENTER); public static void main(String args) MouseEventDemo frame=new MouseEvent
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工艺方案评审意见(3篇)
- 公司员工医疗管理制度
- 公园特许经营招商方案(3篇)
- 军品生产现场管理制度
- 县级电力营销管理制度
- 单位独立运行管理制度
- 公司计件员工管理制度
- 地下遗址改造方案(3篇)
- 广电播出变更管理制度
- DB62T 4485-2021 葡萄抗寒性评价规范
- 生物化学教学研究知识图谱可视化分析
- 小学老师心理健康教育培训
- 正规监控合同协议
- 高中生物2015-2024年10年高考真题专题分类汇编-专题6光合作用考点1捕获光能的色素与结构
- 广东高考:化学必考知识点归纳
- 江苏卷-2025届高考地理4月模拟预测卷(解析版)
- 透射电镜基本操作解答
- 大数据专业英语教程 课件 Unit 1 B Applications of Big Data
- 五脏排毒课件
- 煤矿雨季三防培训
- 2024年系统分析师各章节重要考点及试题及答案
评论
0/150
提交评论