版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 图形界面设计(一),本章主要内容,图形界面设计基础 框架窗口 标签、按钮和按钮事件 面板 布局设计 文本框和文本区,图形用户界面(Graphical User Interface) 提供各种数据直观的图形显示形式 建立友好的交互方式 使得计算机软件的操作简单方便,1. 图形界面设计基础(课本85-89页,领会),AWT和Swing 组件和容器 事件驱动程序设计基础,AWT和Swing(见课本85-86页),Java提供两类图形用户界面: AWT:Abstract Windowing Toolkit 抽象窗口工具包 (Java 1.0版引入) Swing:与AWT相比 功能更加强大、完善
2、 平台相关性较小 (Java 1.2版引入),2020/8/28,6,Swing组件集,Java的Swing组件定义成一系列名为javax.swing.*的包。 三种顶层容器: javax.swing.JApplet: 小应用程序 javax.swing.JDialog: 对话框 javax.swing.JFrame: 框架 Javax.swing.JComponent是除顶层容器外所有 Swing 组件的基类。,组件和容器(见课本85-86页),组件( Component ) 组件是Java图形用户界面的最基本组成部分,是一个可以以图形化的方式显示在屏幕上、并能与用户进行交互的对象,组件不能
3、独立地显示出来,必须将组件放在一定的容器中才可以显示出来。 容器( Container ) 容器是可以容纳其他组件的组件。 容器是图形界面的复合元素。,JComponent,组件类的层次结构 java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-javax.swing.JComponent JComponent大多数Swing组件类父类,Swing 组件,容器 各种组件必须放在容器 容器本身也是一种组件 分类 顶层容器 其它容器 组件 基本控制组件 不可编辑的信息显示组件 可编辑的信息显示组件,一些GUI组件,标签
4、(JLabel) 文本框(JTextField) 按钮(JButton) 复选框(JCheckBox) 组合框(JComboBox) 文本(JTextArea) 框架(JFrame) 面板(JPanel),为了统一管理组件和容器: 为所有组件类定义超类:Component类 为所有容器类定义超类:Container类 对于顶层容器,是向其内容窗格添加组件;对于其他容器,则可直接添加组件。 Container类有 add()方法,可以向容器添加组件。 类java.awt.container的成员方法: public Component add( component comp ) / 将组件com
5、p添加到当前容器中 Component Container 和Graphics 类 是AWT库中的关键类,注意: 一方面,为了保证图形用户界面以及交互方式的正确性和稳定性,目前一般建议使用Swing图形用户界面。 另一方面,Swing建立在AWT基础上,基于Swing的图形用户界面仍然依赖于AWT,设计GUI无法不用到AWT。,事件驱动程序设计基础(见课本85-86页),(1)事件、监视器和监视器注册 (2)实现事件处理的途征 (3)事件类型和监视器接口,(补充)Java事件处理模型,Java事件处理模型是一种人机交互模型,使得用户能够通过鼠标、键盘等输入设备的操作控制程序的执行流程,从而达到
6、人机交互的目的。 将计算机运行时用户对鼠标、键盘等输入设备的各种操作都归类为一个事件;当一个Java程序运行时,由硬件产生的事件通过操作系统传递给程序,那些属于该程序的事件必须交由程序处理。,事件处理模型,GUI是由事件(event)驱动的 当用户与GUI交互可以产生事件(events) 一些常见的交互方式 移动鼠标 用鼠标点击按钮 在文本框中输入数据 关闭窗口等,(1)事件、监视器和监视器注册,在Java里,每当某件事发生在一个GUI组件(事件源或源对象)里,会生成一个事件对象(event)并传给为处理该事件而注册的事件监视器(event listener)。,(2)实现事件处理的途征,事件
7、处理模型的三个基本要素: 事件源(An event source) 事件对象(An event object) 事件监视器(event listener(s),事件源(源对象) 可供用户进行交互的GUI组件 事件对象 包装相应的事件 记录事件源以及处理该事件所需要的各种信息 事件对象对应的类一般位于包java.awt.event和包javax.swing.event中 事件监视器(事件监听器) 在事件源中注册事件监视器,当有事件发生时,事件源接收事件对象,并交由相应的事件监听器处理 事件监听器对应的接口和适配器类一般位于包java.awt.event和包javax.swing.event中,(
8、3)事件类型和监视器接口,常用的事件: 动作事件(ActionEvent) 项事件(ItemEvent) 列表选择事件(ListSelectionEvent) 文档事件(DocumentEvent) 课本88页表5-1 课本88页表5-2,(补充)编写事件处理程序的一般步骤,编写实现事件监听器接口的类或编写事件适配器类的子类(可以是匿名内部类); 在组件或容器中注册事件监听器。,2. 框架窗口(课本89-91页,综合应用),框架(javax.swing.JFrame)是四种顶层容器之一,它提供一个有周边框架、标题栏,以及最小化、最大化和关闭按钮的框架窗口。,JFrame的创建,框架(类java
9、x.swing.JFrame)的构造方法: public JFrame( ) throws HeadlessException / 构造一个初始时不可见的Frame public JFrame( String title ) throws HeadlessException /创建一个新的、初始不可见的、具有指定标题的 Frame;参数title指定标题 也可先编写javax.swing.JFrame的子类,再在子类的构造方法中通过关键字super调用父类的构造方法。,JFrame的常用成员方法,框架(类javax.swing.JFrame)的一系列用于属性设置的成员方法: public vo
10、id setBounds(intx, inty, intwidth, intheight) /移动Frame并调整其大小。由 x 和 y 指定左上角的新位置,由 width 和 height 指定新的宽度和高度。单位是像素。 public void setSize( int width, int height ) / 设置Frame的大小 public void setBackground(Colorc) /设置Frame的背景色,public void setVisible( boolean b ) / 设置Frame是否可见,应当在Frame的属性设置完毕并添加完组件之后调用该方法,使初始
11、不可见的框架变成可见的 public void setTitle(Stringtitle) /将Frame的标题设置为指定的字符串 public void setResizable(booleanresizable) / 设置此窗体是否可由用户调整大小(默认为 可调整大小),框架(类javax.swing.JFrame)的其他常用成员方法: public void pack() / 以紧凑方式显示Frame public String getTitle() /获得窗体的标题,向容器中添加组件,在Swing图形用户界面程序设计中,给顶层容器添加组件的方法一般是先获取顶层容器的内容窗格,再向内容窗
12、格添加组件。 类javax.swing.Frame的成员方法: public Container getContentPane( ) / 返回当前Frame的内容窗格 类java.awt.container的成员方法: public Component add( component comp ) / 将组件comp添加到当前容器中 对于顶层容器,是向其内容窗格添加组件;对于其他容器,则可直接添加组件。,为顶层容器添加组件的另一种方法 建立JPanel对象作为中间容器,将组件添加到这个容器中,再用方法 public void setContentPane(ContainercontentPane
13、) 把此中间容器设置为内容面板。 JPanel contentPane = new JPanel(); / 添加组件到contentPane中 mw = setContentPane(contentPane); / mw为之前创建的某JFame对象,程序实例(见课本90-91页),例5.1 例5.2,3. 标签、按钮和按钮事件 (课本91-94页,综合应用),标签 按钮,标签(见课本91-92页),标签(javax.swing.JLabel)是用于短文本字符串或图像或二者的显示区。标签不对输入事件作出反应。 程序关于标签的基本内容主要包括: 声明一个标签 创建一个标签对象 将标签对象加入某个容
14、器中,标签(类javax.swing.JLabel)的构造方法: public JLabel( ) public JLabel( String text ) public JLabel( String text, int align ) / 参数text指定标签的文字信息;参数align指定文字在水平方向上的对齐方式。常见对齐方式: javax.swing.JLabel.LEFT(左对齐) javax.swing.JLabel.CENTER(中对齐) javax.swing.JLabel.RIGHT(右对齐),JLabel的常用成员方法: public void setText( String
15、 text ) / 设置标签的文字信息 public void getText( ) /返回该标签所显示的文本字符串 public void setToolTipText( String text ) / 设置当鼠标指针在标签上稍加停留时出现的提示信息 public void setBackground(Colorbg) / 设置标签的背景色,默认为容器的背景色 public void setForeground(Colorfg) / 设置标签的前景色,即标签上的文字的颜色,默认为黑色,按钮(见课本92-94页),命令式按钮在界面设计中用于激发动作事件。 命令式按钮(类javax.swing.
16、JButton)的构造方法: public JButton ( ) public JButton ( Icon icon ) public JButton ( String text) public JButton ( String text, Icon icon) / 参数icon指定命令式按钮的图标;参数text指定命令式按钮的文本信息 JButton的成员方法详见API文档,命令式按钮(JButton)可以触发动作事件,其类定义中含有成员方法 public void addActionListener( ActionListener a ) / 为按钮注册由参数a指定的动作事件监视器 动
17、作事件监视器一般是实现接口java.awt.event.ActionListener的类的实例对象。 接口java.awt.event.ActionListener的定义如下: public interface ActionListener extends EventListener public void actionPerformed( ActionEvent e ); ,动作事件监视器,动作事件对象,动作事件对象的具体类型为java.awt.event.ActionEvent。 类java.awt.event.ActionEvent的常用成员方法包括: public Object get
18、Source( ) / 返回当前事件的事件源 public String getActionCommand( ) / 返回当前动作事件相关的字符串 类JButton中定义了成员方法: public void setActionCommand(StringactionCommand) /设置此按钮的动作命令,按钮(动作事件)处理程序的基本内容包括: 定义一个类,实现接口ActionListener,即在此类中实现actionPerformed()方法 声明一个按钮 创建一个按钮对象 将按钮对象加入到某个容器中 为需要控制的按钮对象注册动作事件监视器,程序实例(见课本93页),例5.3,4. 面板
19、(课本94-96页),JPanel(综合应用) JScrollPane(简单应用),JPanel(见课本94-95页),面板(JPanel)是一种常用容器,常被用作中间容器。 面板(类javax.swing.JPanel)的构造方法: public JPanel ( ) public JPanel(LayoutManagerlayout) /创建具有指定布局管理器的JPanel 使用JPanel的两种途径: 直接创建JPanel的实例对象,在其中添加组件,再将其放入另一个容器中(如JFrame) 定义JPanel类的子类,在其构造方法中向其中添加组件,再通过创建这个子类的实例对象,并将这个对象
20、加入另一个容器中,JPanel的常用成员方法: public void setPreferredSize( Dimension preferredSize ) / 将面板大小设置为参数preferredSize所指定的尺寸 类java.awt.Dimension的构造方法: public Dimension( int width, int height ) / 参数width指定宽度,参数height指定高度 public void setBackground( Color bg ) / 将面板背景颜色设置为参数bg所指定的颜色,程序实例(见课本95页),例5.4,JScrollPane(见课
21、本95-96页),JScrollPane是带有滚动条的面板,它也是java.awt.container类的子类,但规定只能向其中添加一个组件。 当一个容器的显示区域不足,导致无法同时显示其中的所有组件时,如果让容器带有滚动条,则通过移动滚动条的滑块,就可以看到所有位置上的组件。为容器添加滚动条的工作,可以通过将容器添加到一个JScrollPane中实现。,滚动窗格(javax.swing.JScrollPane)的构造方法: public JScrollPane( ) / 可以先创建JScrollPane对象,再用其成员方法setViewportView(Componentview)设置需要加
22、上滚动条功能的组件 public JScrollPane( Component view) / 参数view指定需要加上滚动条功能的组件,只要组件的内容超过视图大小就会显示水平和垂直滚动条,设置JScrollPane滚动条属性的成员方法: public void setHorizontalScrollBarPolicy(intpolicy) / 确定水平滚动条何时显示在滚动窗格上。选项有: ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED (水平滚动条需要时才显现) ScrollPaneConstants.HORIZONTAL_SCROLLB
23、AR_NEVER (水平滚动条总是不可见) ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS (水平滚动条总是可见) public void setVerticalScrollBarPolicy(intpolicy) / 确定垂直滚动条何时显示在滚动窗格上。选项有: ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED(垂直滚动条需要时才显现) ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER (垂直滚动条总是不可见) ScrollPaneConstants.VER
24、TICAL_SCROLLBAR_ALWAYS (垂直滚动条总是可见),5. 布局设计(课本96-102页,综合应用),FlowLayout布局 BorderLayout布局 GridLayout布局 CardLayout布局 Null布局与setBounds方法(识记),布局管理器,布局管理器的任务是组织和管理一个容器里的元素,具体来讲,它要执行的任务包括: 决定容器的全面尺寸 决定容器里每个元素的大小 决定元素之间的间隔 决定元素的位置 在Java中,主要使用AWT和Swing内置的布局管理器来管理布局。,FlowLayout布局(见课本97页),流布局管理器(java.awt.FlowLa
25、yout)是 java.awt.Applet、java.awt.Panel 和 javax.swing.JPanel的默认布局方式。 特点:在容器中,从左到右依次排列组件,当组件排满一行时,则从下一行开始继续排列组件。 可以设置每行组件的对齐方式为: 左对齐、中间(默认对齐方式)和右对齐。,类java.awt.FlowLayout的构造方法: public FlowLayout( ) public FlowLayout( int align ) public FlowLayout( int align, int hgap, int vgap) / 参数hgap(vgap)指定同一行相邻两组件之
26、间的水平(竖直)间隙,单位均为像素,默认值均为5;参数 align指定行对齐方式: java.awt.FlowLayout.LEFT(左对齐) java.awt.FlowLayout.CENTER(中对齐) java.awt.FlowLayout.RIGHT(右对齐),BorderLayout布局(见课本97-98页),边界布局管理器(java.awt.BorderLayout)是 java.awt.Frame、java.awt.Dialog 和 javax.swing.Window、 javax.swing.Frame、 javax.swing.Dialog的默认布局方式。 特点:将容器分成
27、东、西、南、北、中五个区域,分别对应常量: java.awt.BorderLayout.EAST 东(右侧) java.awt.BorderLayout.WEST 西(左侧) java.awt.BorderLayout.SOUTH 南(底部) java.awt.BorderLayout.NORTH 北(顶部) java.awt.BorderLayout.CENTER 中(中间) 每个区域最多只能容纳1个组件。,类java.awt.BorderLayout的构造方法: public BorderLayout( ) public BorderLayout( int hgap, int vgap )
28、 / 参数hgap指定同一行相邻两组件之间的水平间距,参数vgap指定相邻两行组件之间的竖直间距,单位均为像素,默认值均为0,程序实例(见课本97-98页),例5.5,GridLayout布局(见课本98-99页),特点:网格布局管理器(java.awt.GridLayout)将容器按行与列等分成相同大小的矩形区域(网格) 每个组件占用具有相同宽度和高度的网格 添加组件到网格的顺序: 从左到右,从上到下,类java.awt.GridLayout的构造方法: public GridLayout( ) public GridLayout( int rows, int cols ) public G
29、ridLayout( int rows, int cols, int hgap, int vgap ) / 参数rows和col分别指定网格的行数和列数(注意实际行数和列数的计算),默认值均为1;参数hgap和vgap分别指定同一行相邻两组件之间的水平和竖直间距,单位均为像素,默认值均为0;,程序实例(见课本98-99页),例5.6,CardLayout布局(见课本100-101页),特点:卡片布局管理器(java.awt.CardLayout)对组件的排列类似于码扑克牌: 新加入的组件放在已加入的组件的上面,每次一般只能看到一个组件; 可以从上到下依次取出下一个组件,而当前组件变为最后一个组
30、件; 可以直接翻到某个组件,而组件之间前后排列顺序保持一致。,类java.awt.cardLayout的构造方法: public CardLayout( ) public CardLayout(int hgap, int vgap ) / 参数hgap和vgap分别指定组件与容器边界之间的水平和竖直间隙,单位均为像素,默认值均为0;,在CardLayout布局下向容器添加组件:使用类java.awt.container的成员方法: public void add( component comp, Object contraints ) / 将组件comp添加到当前容器中,参数contraint
31、s的实际类型为String,指定组件comp的名称。新加入的组件放在已加入的组件的上面,类java.awt.CardLayout提供了成员方法: public void show( Container parent, String name) / 直接翻转到指定组件,但不改变组件间的前后排列顺序。参数parent指定要在其中布局的父容器;参数name指定要翻转到的组件的名称。 public void first( Containerparent ) / 翻转到容器parent的第一个组件 public void last( Containerparent ) / 翻转到容器parent的最后一
32、个组件 public void next( Containerparent ) / 翻转到容器parent中当前显示组件的后一个组件 public void previous( Containerparent ) / 翻转到容器parent中当前显示组件的前一个组件,程序实例(见课本100-101页),例5.7,Null布局与setBounds方法(见课本100-101页),可以把一个容器的布局设置为null,即空布局。而采用组件的setBounds()方法设置其大小和在容器中的位置。 类java.awt.Component的成员方法: public void setBounds(intx,
33、inty, intwidth, intheight) / 设置组件位置及大小。由 x 和 y 指定组件的左上角在容器中的位置坐标,由 width 和 height 指定组件的宽和高。,类java.awt.Component还有成员方法: public Dimension getSize( ) / 以 Dimension 对象的形式返回组件的大小。Dimension 对象的 height 字段包含此组件的高度,而 Dimension 对象的 width 字段则包含此组件的宽度。 布局管理器类(如FlowLayout、BorderLayout、GridLayout、CardLayout等)有成员方
34、法: public void setHgap(inthgap) /将组件之间的水平间距设置为指定值 public void setVgap(intvgap) /将组件之间的垂直间距设置为指定值,6. 文本框和文本区 (课本102-107页,综合应用),文本框 文本区 数据输入和输出,文本框(见课本102-103页),文本框(javax.swing.JTextField)和密码式文本框(javax.swing.JPasswordField)可用来编辑单行文本 。 采用文本框,则可直接在文本框中看到输入的字符 采用密码式文本框,输入的字符在文本框中显示为“*”,文本框(类javax.swing.J
35、TextField)的构造方法: public JTextField ( ) public JTextField ( String text ) public JTextField ( int columns) public JTextField ( String text, int columns) / 参数text指定在文本框中显示的初始文本信息;参数columns为非负整数,指定文本框的宽度,密码式文本框(类javax.swing.JPasswordField)的构造方法: public JPasswordField( ) public JPasswordField( String text ) public JPasswordField( int columns) public JPasswordField( String text, int columns) / 参数text指定在密码式文本框中显示的初始文本信息;参数columns为非负整数,指定密码式文本框的宽度,类java.swing.JTextField或 类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论