Java语言程序设计实用教程第三版及代码精品PPT课件.ppt_第1页
Java语言程序设计实用教程第三版及代码精品PPT课件.ppt_第2页
Java语言程序设计实用教程第三版及代码精品PPT课件.ppt_第3页
Java语言程序设计实用教程第三版及代码精品PPT课件.ppt_第4页
Java语言程序设计实用教程第三版及代码精品PPT课件.ppt_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java语言程序设计实用教程第13讲 图形用户界面3本章学习要点:识别用户界面屏幕的组件以及主要的类理解布局管理器,在用户接口上组织组件理解事件监听器,理解委派事件模型掌握Java图形用户界面开发方法13.1 图形用户界面组件图形用户界面GUI (见P349图13-1) 至今为止所编写的Java程序只能从键盘输入,在控制台屏幕上显示结果。图形用户界面(GUI,Graphical User Interface)是为应用程序提供一个图形化的界面,程序通过GUI与用户交互,GUI能使一个应用程序具有与众不同的“外观”与“感觉”,是目前应用程序大多数是采用的方式。 WinUI:标准的MS Window

2、s或X-Windows的应用系统,应用使用来自操作系统的GUI元素和其它加入的元素WebUI:Web应用系统,基于浏览器操作Java程序图形界面的坐标设置原点(0,0)X轴Y轴用户图形接口AWTAWT(Abstract Window Toolkit)是一个独立平台的窗口工具组件集,它依赖于对等组件(Peer),而对等组件是一个本地GUI组件,由AWT类管理。AWT的作用是给用户提供基本的界面组件,如按钮、列表框、菜单等。AWT最初只包括与本地对等组件相关联的组件,称为重量组件(Heavyweight Component),这些组件在它们自己的本地不透明窗口中绘制,用AWT创建的应用外观在不同的

3、操作系统平台上是不同。 用户图形接口SwingJava基类(Java Foundation Classes,JFC)是关于GUI组件和服务的完整集合,主要由5个API构成:AWT、Swing、Java 2D、Drag and Drop、AccessibilitySwing是建立在AWT基础之上的,它利用了AWT的底层组件,包括图形、颜色、字体、工具包和布局管理器等。使用AWT最好的部分来建立一个新的轻量组件集,而丢弃了AWT中有问题的重量组件部分。 通过引入新特性和丰富的功能,Swing提供了比AWT更全面的组件集合。Swing API是围绕实现AWT各个部分的API构建的,这保证了所有早期的

4、AWT组件仍然可以使用。JFC的两个特性javax.swing.plaf:提供一个接口和许多抽象类,Swing 用它们来提供自己的可插入外观功能。例如可用提供本地操作系统的外观,在Windows上执行应用,看上去像是专为Windows环境定制,其它Linux、UNIX也类似。 拖拽与放置(Drag-and-Drop):把数据从源 转变到目标。源和目标可以是两个不同应用的控件,还可在剪贴板之间来回传递数据。java.awt.dnd和java.awt.datatransfer包可用于拖拽与放置操作基本概念 组件(Component):可视化控件,例如文本框、复选框、列表框、按钮等称为组件,是 Ja

5、va的图形用户界面的最基本组成部分,组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来容器(Container):容器是一种特殊的组件,一种能够容纳其他组件或容器的组件。每个组件继承它的父容器的性质,如字体、颜色容器控制存放在其中的组件的位置布局管理器(Layout Manager):为了使图形用户界面具有良好的平台无关性,提供了专门用来管理组件在容器中的布局的工具。Java常用控件介绍Textbox文本框,接收单行字符串输入TextArea文本区,接收多行字符串的输入Push button按钮,触发一系列动作Label标题,在容器上显示静态文本Check box复选框,接收ye

6、s/no值的数据,可多选Radio button单选按钮,只允许从一组选项中选择一个Combo box下拉列表框,只允许单选,可输入新值List box列表框,允许多选,不可输入新值Swing组件基本控制ButtonsListMenuSliderText fieldsCombo boxSwing组件信息显示LabelProgress barTool tipSwing组件可编辑格式化信息显示Color chooserTableTextTreeSwing程序举例import javax.swing.*; public class HelloWorldSwing public static void

7、 main(String args) JFrame frame = new JFrame(HelloWorldSwing); final JLabel label = new JLabel(Hello World); frame.getContentPane().add(label); frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); frame.pack(); frame.setVisible(true); Swing应用程序基本结构引

8、入Swing 包:import javax.swing.*; import java.awt.*; import java.awt.event.*; 选择Look&Feel设置窗口布局设置窗口容器JFrame、JPanel设置Swing组件,将其加入JPanel注意:JFrame的默认大小为00并且是不可见的,用setBounds方法设置框架的大小,setVisible(true)显示窗口Swing中的Look&FeelCDE/Motif look and feelWindows look and feelJava look and feel Swing中的Look&Feel使用UIManag

9、er.setLookAndFeel( ) 方法进行设置。在该方法中可以使用的参数:UIManager.getCrossPlatformLookAndFeelClassName() - Java Look & Feel. UIManager.getSystemLookAndFeelClassName() 当前平台的look&feeljavax.swing.plaf.metal.MetalLookAndFeel -Java Look & Feel. com.sun.java.swing.plaf.windows.WindowsLookAndFeel - Windows Look & Feel. c

10、om.sun.java.swing.plaf.motif.MotifLookAndFeel - CDE/Motif Look & Feel. javax.swing.plaf.mac.MacLookAndFeel - Mac OS Look & FeelSwing组件层次结构(P351)Java.awt.ContainerJavax.swing.JComponentJTextComponentAbstractButtonJPanelJComboBoxJLabelJTreeJTextAreaJTextFieldJPasswordFieldJToggleButtonJButtonJMenuItem

11、JCheckBoxJRadioButtonJComponent组件类的层次结构java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-javax.swing.JComponentJComponent大多数Swing组件类父类一些GUI组件标签(JLabel)文本框(JTextField)按钮(JButton)复选框(JCheckBox)组合框(JComboBox)文本(JTextArea)框架(JFrame)面板(JPanel)标签(JLabel)标签为GUI提供文本(主要)或图像(也可以)信息对应类(JLabel)

12、 (JComponent的子类)可以显示:单行的只读的文本信息图像同时显示文本与图像信息程序一般不修改标签的内容用法:JLabel label=new JLabel(“标签名”); panel.add(label) ;/将标签加入容器文本框(JTextField)文本框(JTextField)显示单行的文本信息JTextField extends JTextComponent密码框(JPasswordField)输入的字符显示为“*”用法举例:JTextField textobj=new JTextField(10);10指定文本域的长度 panel.add(textobj);textobj.

13、setText(“yyyy-mm-dd”);String date=textobj.getText();按钮(JButton)当鼠标左键单击按钮组件时,能触发特定的事件在Java中, 广义的按钮包括:命令式按钮(JButton)复选框(JCheckBox)单选按钮(JRadioButton)用法举例:CheckboxGroup cbg=new CheckboxGroup();Checkbox check1=new Checkbox(“check1,cbg,true); Checkbox check2= new Checkbox(“check2,cbg,false); panel.add(che

14、ck1);panel.add(check2);组合框(JComboBox)组合框(JComboBox)可以从下拉式的列表框中选取其中的列表项有时也称为下拉框(drop-down list)类JComboBox中的方法getSelectedIndex( )返回当前被选中的项setMaximumRowCount(n)设置最多显示列表项的项数滚动条(Scrollbar)会自动加上滑动条(JSlider)滑动条(JSlider)提供了以图形方式进行数值选取的功能。可以用来表示程序执行的进度情况。java.awt.Container是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整

15、体。容器可以简化图形化界面的设计,以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。Swing的容器分顶层容器和其它容器,一下为三个顶层组件:容器(Container)技术介绍AppletDialogFrameSwing组件通用容器Panel Scroll paneSplit paneTool barTabbed pane框架(JFrame)类 JFrame 是java.awt.Frame的子类在Swing的组件中, JFrame 并不全是由Java编写的是一种与平台关系比较密切的组件(Heavyweight component)java.lang.Object | +

16、-java.awt.Component | +-java.awt.Container | +-java.awt.Window | +-java.awt.Frame | +-javax.swing.JFrame设置窗口容器JFrame类似于Frame ,JFrame是AWT中Frame的子类。不能直接向JFrame中加入组件,而要向JFrame的content pane或向另外提供的新的content pane中增加组件。content pane中包含除了menu bar之外的所有组件。getContentPane() 获取JFrame的content pane;setContentPane()

17、 设置content pane面板(JPanel)一种中间容器,用来组成其它组件可以添加各种组件(包括面板组件)面板(JPanel)的大小由它所包含的组件决定当组件个数增加,面板(JPanel)也会随之而增大设置Swing组件frame = new JFrame(.); button = new JButton(.);label = new JLabel(.); pane = new JPanel(); pane.add(button); pane.add(label); frame.getContentPane().add(pane,BorderLayout.CENTER); 建立Swing

18、 GUI Swing包中定义了两类组件: 顶层容器(JFrame,JApplet,JWindow,JDialog) 轻型组件(J开头的所有组件,如JButton,JPanel,JMenu等)一般如果使用Swing组件,则程序中只使用Swing组件 和Swing容器。 Swing组件可以加入到一个与顶层容器相关的content pane中,而不能直接加入到顶层容器中。13.2 布局管理器布局管理器-LayoutManagerJava为了实现跨平台的特性并且获得动态的布局效果,Java将容器内的所有组件安排给一个“布局管理器”负责管理,如:排列顺序,组件的大小、位置,当窗口移动或调整大小后组件如何

19、变化等功能授权给对应的容器布局管理器来管理。不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。布局管理器的类型Java中的布局类型包括以下几种:FlowLayout(流式布局)BorderLayout (边界布局) GridLayout(网格布局)CardLayout (卡片布局)GridBagLayout(高级方格式界面设计)BoxLayout(盒式界面设计):由Swing包提供 null(空布局)FlowLayout布局管理器FlowLayout 是Panel、JPanel、Applet的缺省布局管理器。其组件的放置规律是从上到下、从左到右进行放置。如果容器足

20、够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。 当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,其变化规律是:组件的大小不变,但是相对位置会发生变化。例如有三个按钮都处于同一行,但是如果把该窗口变窄,窄到刚好能够放下一个按钮,则第二个按钮将折到第二行,第三个按钮将折到第三行。FlowLayout布局管理器FlowLayout的构造函数有:FlowLayout( ):生成一个默认的流式布局FlowLayout(int alignment):可以设定每一行组件的对齐方式 FlowLayou

21、t(int alignment,int horz,int vert):可以指定对齐方式,设定组件间的水平和垂直距离对齐方式参数的含义:FlowLayout(FlowLayout.RIGHT,20,40);/*第一个参数表示组件的对齐方式,指组件在这一行中的位置是居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间隔,第三个参数是组件之间的纵向间隔,单位是象素。*/FlowLayout(FlowLayout.LEFT); /居左对齐,横向间隔和纵向间隔都是缺省值5个象素FlowLayout(); /缺省的对齐方式居中对齐,横向间隔和纵向间隔都是缺省值5个象素 FlowLayout myl

22、ayout = new FlowLayout();FlowLayout exLayout = new FlowLayout(FlowLayout.RIGHT);setLayout(exlayout); / 为容器设置新布局 构造方法说明(P355,演示)网格布局管理器以矩形网管形式对容器的组件进行布置。容器被分成大小相等的矩形格子,一个矩形格子中放置一个组件,从左到右,自顶向下地放置。GridLayout的构造函数如下所示:GridLayout():生成一个单列的网格布局GridLayout(int row,int col):生成一个设定行数和列数的网格布局GridLayout(int row

23、,int col,int horz,int vert):可以设置组件之间的水平和垂直间隔GridLayout布局管理器示例(演示). . . Button btn; / 声明按钮数组 String str=1,2,3,4,5,6,7,8,9; setLayout(new GridLayout(3,3); btn=new Buttonstr.length; / 创建按钮数组 for(int i=0;istr.length;i+) btni=new Button(stri); add(btni); BorderLayout 是Frame、JFrame、Dialog和JApplet的缺省布局管理器。

24、BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。BorderLayout布局管理器CenterNorthSouthWestEastBorderLayout() :构造一个组件之间没有间距的新边界布局。 BorderLayout(int hgap, int vgap) :指定组件之间的水平、垂直间距来构造一个边界布局。 例如:f.setLayout(new BorderLayout();f.add(North, new Button(North);/第一个参数表示把按钮添加到容器的North区域 构造方法例

25、子(演示). . . setLayout(new BorderLayout(); Button btnEast=new Button(东); Button btnWest=new Button(西); Button btnNorth=new Button(北); Button btnSouth=new Button(南); Button btnCenter=new Button(中); add(btnEast,BorderLayout.EAST); add(btnWest,BorderLayout.WEST); add(btnNorth,BorderLayout.NORTH); add(btn

26、South,BorderLayout.SOUTH); add(btnCenter,BorderLayout.CENTER);在使用BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化。例如:容器变高了,则North、South区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽。不一定所有的区域都有组件,如果四周的区域(West、East、North、South区域)没有组件,则由Center区域去补充,但是如果Center区域没有组件,则保持空白Borde

27、rLayout内的组件变化特性CardLayout布局管理器(P358,演示)卡片布局是把组件安排到不同的卡片容器中,这个卡片容器相互重叠,但一次只能显示一个组件,因此也称之为“联合布局(Combining layouts)”,该布局管理器会自动改变原有尺寸,充满整个空间,在添加组件时需要给组件起个名称,以便与以后直接通过名称调用组件。每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。卡片布局提供了两种方式显示组件一种是通过public void show(Container parent,String name);另一种是根据组件添加的顺序直接调用first(Conta

28、iner parent),next(Container parent),previous(Container parent),last(Container parent)4个方法来显示组件 BoxLayout是Swing提供的布局管理器,它有两种排列方式,一种是水平的,另一种是垂直的。我们可以使用BoxLayout提供的两个常量X_AXIS、Y_AXIS来指明组件在容器中是水平还是垂直排列的。构造方法: BoxLayout(Container con, int axis) BoxLayout.X_AXIS或BoxLayout.Y_AXISBoxLayout布局管理器GridBagLayout类

29、与GridBagConstraints类GridBagLayout 是一个灵活的布局管理器,借助于GridBagConstraints类,实现更灵活的外观管理,提供具有不同大小的行和列来放置组件,每个单元大小可不同。 方法:使用GridBagConstraints对象来确定组件的大小和位置约束,然后将其加入GridBagLayout 对象中button1button2button3button8button5button6button7button4button9 GridBagLayout gbl=new GridBagLayout(); /只有一种无参构造方法 panel.setLayou

30、t(gbl); GridBagConstraints q=new GridBagConstraints(); /配置约束对象 q.*=*; gbl.setConstraints(component, q); /将组件component按照约束q设置 panel.add(component);具体的使用方式(P359)常用的约束条件一fill属性:当组件的显示区域大于组件大小时的显示方式。该属性必须与weighttx和weighty属性一起使用默认值为GridBagConstraints.NONE,表示组件大小不变 ;GridBagConstraints.HORIZONTAL表示将组件拉宽到与单

31、元格宽度相同;GridBagConstraints.VERTICAL表示将组件的高度提升到与单元格高度一致;GridBagConstraints.BOTH表示将组件的高度和宽度都拉伸到与单元格一致.BoxLayout属性允许纵向或横向布置多个组件的布局管理器常用的约束条件二gridwidth,gridheight属性:指定组件所占的单元格的数量,默认值皆为1. gridwidth表示横向单元格数量;gridheight表示纵向单元格数量.gridx,gridy属性:指定组件所在单元格的位置. gridx表示列数; gridy表示行数.weightx,weighty属性:指定当图形窗口扩大时,各

32、单元格如何分配被扩大的空间.weightx表示横向扩大权重,weighty表示纵向扩大权重.ipadx,ipady属性:指定组件内部的填充宽度和高度.insets属性:指定组件和单元格之间的空隙.anchor属性:指定当组件小于单元格时的放置方式.null布局管理器当用户不想使用布局管理器,需要自己设置组件的位置和大小时,可以把容器的布局设置为null布局。向空布局的容器添加组建时需要下列两个步骤:使用add(c)方法向容器中添加组件c;组件调用setBounds(int x,int y,int width,int height)方法设置该组件在容器中的位置。需要注意的是,这种方法会导致程序与

33、系统相关,如不同的分辨率会产生不同的效果。小结:布局管理(一)FlowLayout: 组件在一行中从左至右水平排列,排满后折行,缺省的Panel布局管器BorderLayout:北、南、东、西、中,缺省的窗口容器的管理器CardLayout:每一个组件作为一个卡片,容器仅显示多个卡片中的某一个GridLayout:以行和列的网格形式安排组件GridBagLayout:使用复杂、功能灵活小结:布局管理(二)Frame是一个顶级窗口。Frame的缺省布局管理器为BorderLayout。Panel 无法单独显示,必须添加到某个容器中。 Panel 的缺省布局管理器为FlowLayout。当把Pan

34、el 作为一个组件添加到某个容器中后,该Panel 仍然可以有自己的布局管理器。因此,可以利用Panel 使得BorderLayout 中某个区域显示多个组件,达到设计复杂用户界面的目的 。如果采用无布局管理器 setLayout(null),则必须使用setLocation(),setSize(),setBounds()等方法手工设置组件的大小和位置,此方法会导致平台相关,不鼓励使用。 13.3 处理事件几个有用的概念事件 描述用户所执行的操作,在java.awt.event包中定义了若干类型的事件(例如点击鼠标、按下键盘、关闭窗口)监听者接口 特定类型的Listener接口,用于监听特定类

35、型的事件监听者类 是实现了某种监听者接口的类,由编程者定义事件监听者 是某个监听者类的对象,由编程者使用new创建AWT事件处理的基本概念和流程事件源用户在各种场合进行的各项操作,如敲击键盘或用鼠标点击某个组件等。事件源指的是产生事件的对象。事件对象对于不同的事件源,Java虚拟机会产生相应类型的事件对象。Java自动识别各种不同的事件对象的类型并进行分类处理。事件处理(监听)器接口各种类型的事件均有对应的事件处理器接口。该接口封装了与其对应类型事件的各种处理方法,并建立了事件到相应处理方法的自动映射。事件处理模型基于授权事件模型:事件来源对象S因用户进行操作(鼠标或键盘)系统会自动触发此事件

36、类对象E,并通知所授权的事件监听者L(需事先调用来源对象的addXxxListener方法向L注册),事件监听者L中有处理各种事件的方法(事件处理者1n)便会处理此事件E的各种状况 。SEL编程的基本方法(重点)1. 对java.awt中组件实现事件处理必须使用java.awt.event包,所以在程序开始应加入import java.awt.event.*语句。2. 定义事件监听者类,有两种方法(): 2.1.实现事件所对应的接口XXListener,并重写接口中的全部方法(即使不需要的方法也必须定义,可定义为空方法)。 2.2. 继承事件对应的抽象适配器(adapter)类,重写该类中所需

37、的方法3. 创建事件监听者对象4. 为将会触发事件的组件C注册相应的事件监听者对象: 事件源.addXXListener(XXListener代表某种事件监听者)。实际上addXXListener中的参数是一个事件监听器对象。5. 要删除事件监听者可以使用语句:事件源.removeXXListener;public class ButtonAct extends Frame . . . public ButtonAct() . . . /为b1注册事件监听者B1b1.addActionListener(new B1();add(b1);. . . /利用inner class结构定义监听者类 class B1 implements ActionListener /利用actionPerformed方法进行事件处理public void actionPerformed(ActionEvent e)who.setText(But

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论