Java语言系统界面设计_第1页
Java语言系统界面设计_第2页
Java语言系统界面设计_第3页
Java语言系统界面设计_第4页
Java语言系统界面设计_第5页
已阅读5页,还剩114页未读 继续免费阅读

下载本文档

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

文档简介

模块6系统界面设计

——图形界面设计及事件处理主要内容学习目标及重、难点1教学内容2课堂、拓展实践3小结4学习目标及重点、难点学习目标了解图形界面的基础知识掌握Swing编程步骤掌握容器的创建与使用掌握常用Swing组件的创建和使用掌握布局管理器的使用掌握事件处理机制重点容器的创建与使用布局管理器事件处理机制难点页面的布局管理事件处理重、难点;;;回顾Java基础数据类型、运算符、表达式分支结构和循环结构数组的创建与使用字符串的基本操作面向对象基础面向对象思想类的创建与使用对象的创建与使用继承、对象转型、多态、接口集合容器set、List、Map引入前面的所有模块中,用户与系统的交互是通过控制台输入/输出实现,操作不方便,交互性不好。如何能像Windows界面操作那样美观、方便,实现交互功能?第一讲

——Swing基础及常用容器

使用NetBeans开发Swing应用程序图形界面简介图形用户界面(Graphical

user

interface,称GUI)是采用图形方式显示的计算机操作用户界面,包括窗口、菜单、按钮、工具栏和其他各种屏幕元素。Java中主要提供了两个包为GUI设计提供丰富的功能,它们是AWT(java.awt)和Swing(javax.swing)。图形界面简介1.AWTAWT是Java1.0提供的抽象视窗工具包,将处理用户界面的任务交给操作系统,由底层平台负责创建图形界面元素,AWT组件构建的GUI程序受操作系统的影响,在不同平台上进行测试会有不同的结果显示。2.SwingSwing是构筑在AWT上层的一组GUI组件的集合,对于底层平台的依赖更少。Swing中保留了AWT的事件处理、颜色、字体等处理。设计和实现图形用户界面主要有两方面:创建组成界面的各个元素、设置它们的属性、指定它们的位置,构成完整的图形用户界面的外观。定义图形用户界面的事件、确定界面各元素对不同事件的响应,实现与用户的交互。图形界面简介Swing编程简介Swing组件都是AWT的Container类的直接子类和间接子类,各类之间的关系如下。

java.awt.Component

-java.awt.Container

-java.awt.Window

-java.awt.Frame-javax.swing.JFrame

-javax.Dialog-javax.swing.JDialog

-javax.swing.JWindow

-java.awt.Applet-javax.swing.JApplet

-javax.swing.Box

-javax.swing.JcomponetJComponent类是大部分Swing组件的父类,它是抽象类,不能创建对象,但它包含了数百个函数,Swing中的每个组件都可以使用这些函数。Swing编程简介使用NetBeans开发Swing应用程序的一般步骤:1.新建项目2.创建基于Swing的窗体3.Swing可视化设计4.设置窗体属性5.进行事件处理6.测试程序Swing容器组件-简介容器(Container)也是一个类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。容器可以简化图形化界面的设计,以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。容器可以嵌套使用。Swing容器组件-简介顶层容器窗体JFrame、JWindow、JApplet、JDialog中间层容器面板JPanel、

滚动窗格JScrollPane、JScrollBar、

拆分窗格JSplitPane、索查标签窗格JTabbedPane、JToolBar等特殊容器内部窗体JInternalFrame、分层窗格JLayeredPane、根窗格JRootPaneSwing框架-JFrameJFrame是Swing程序的最外层窗口,它具有操作系统窗口的特性:最小化/最大化、关闭、改变大小、移动等。JFrame类是Java.awt包中的Frame类的子类,该类在javax.swing包中在GUI编程中,一般至少有一个顶层窗体(JFrame、JDialog等)Swing框架-JFrameJFrame常用的构造方法用:JFrame()

构造一个初始时不可见的新窗体。JFrame(String

title)

创建一个新的、初始不可见的、具有指定标题的窗体。Swing框架-JFrame常用方法与基本操作:add()将组件添加到窗体中。

is/setVisible()

获取/设置窗体的可视状态,换句话说,是否在屏幕上显示。

get/setTitle()获取/设置窗体的标题。

get/setState()获取/设置窗体的最小化、最大化等状态。

get/setLocation()获取/设置窗体在屏幕上应当出现的位置。

get/setSize()获取/设置窗体的大小。setDefaultCloseOperation(int

operation)设置点击窗体上的关闭按钮时的默认操作setIconImage(Iconicon)方法设置窗口图标。getContentPane()获取窗体的内容面板DO_NOTHING_ON_CLOSE:当窗口关闭时,不做任何处理;HIDE_ON_CLOSE:当窗口关闭时,隐藏这个窗口;DISPOSE_ON_CLOSE:当窗口关闭时,隐藏并处理这个窗口;EXIT_ON_CLOSE:当窗口关闭时,退出程序。课堂演示-创建一个新窗体设置标题方法1:属性窗口:设置title属性为“我的第一个Swing程序”方法2:添加代码:this.setTitle("我的第一个Swing程序");设置尺寸方法1:属性窗口-代码:设置“窗体大小策略”为“生成调整大小代码”

设置“窗体大小”的高度和宽度为300和200方法2:添加代码:this.setSize(300,200);设置背景色

添加代码:

this.getContentPane().setBackground(Color.red);设置SetDefaultCloseOperation

EXIT_ON_CLOSE17Swing对话框-JDialog对话框与框架(JFrame)有一些相似,但它一般是一个临时的窗口,主要用于显示提示信息或接受用户输入。对话框中一般不需要菜单条,也不需要改变窗口大小,用户可以决定对话框的尺寸是否能被改变。在对话框出现时,可以设定禁止其他窗口的输入,直到这个对话框被关闭。构造方法:JDialog(Dialogowner)构造一个属于Dialog组件的对话框,无模式,无标题。JDialog(Dialogowner,booleanmodel)构造一个属于Dialog组件的对话框,有模式,无标题。JDialog(Dialogowner,Stringtitle)构造一个属于Dialog组件的对话框,无模式,有标题。JDialog(Dialogowner,Stringtitle,booleanmodel)构造一个属于Dialog组件的对话框,有模式,有标题。CompanyLogoSwing对话框-JDialog常用成员方法有:getContentPane()返回此对话框的ContentPane对象。setDefaultCloseOperation(intoperation)设置当用户在此对话框上启动"close"时默认执行的操作。setJMenuBar(JMenuBarmenu)设置此对话框的菜单栏。一般对话框都会依附在某个JFrame窗口上,对话框通常是一个程序运行的过程中与用户互动的中间过程。Swing对话框-JDialogSwing面板-JPanelJPanel是一般的轻量级容器,可以容纳其他组件。与JPanel相比,JFrame用来制作桌面程序主框架窗口,是顶级窗体,而JPanel只是普通面板。JPanel可以放在JFrame中,反之,则不行。通常,组件不直接放入顶级窗体JFrame,而是先放入普通面板JPanel中,然后将JPanel放入顶级窗体JFrame。这样使得Swing程序中的组件更具有层次,方便组件管理与布局。Swing面板-JPanel常用构造方法:JPanel()

创建具有流布局的新面板。JPanel(LayoutManager

layout)

创建具有指定布局管理器的新面板。常用成员方法:add(Componentcomp)添加组件到面板中setBorder(Border

border)设置面板的边框方法setBorder()中使用到的Border为边界接口,通过BorderFactory类的相关createXXXBorder()方法可以创建其对象,并用来设置组件的边框。如: JPaneljp1=newJPanel(); jp1.setBorder(BorderFactory.createTitledBorder("测试"));常用属性border:设置边框Swing面板-JPanelCompanyLogo存放工具栏组件的容器,工具栏中的组件通常是图标形式显示的按钮,组合框也是工具栏中的常用组件。常用构造方法:JToolBar()JToolBar(Stringtitle)//工具栏处于浮动状态时窗口的标题JToolBar(intorientation)//指定工具拦水平或垂直方向放置常用成员方法:add(Componentcomp)//增加组件到工具栏addSeparator()//在工具栏末尾添加一个分隔符工具栏上的组件调用下列方法可以为该命令设置提示信息:

setToolTipText(Stringtext)Swing工具栏-JToolBarCompanyLogo课堂实践创建一个标题为“我的第一个窗口”,大小为(300,200),位置居中的窗口。提示:在属性窗口-代码中选择“生成中心”即可居中显示。图形界面基础知识Swing编程的一般流程相对固定容器分为顶层容器和中间容器顶层容器一般只有一个小结CompanyLogo第二讲

——Swing常用组件

使用NetBeans开发Swing应用程序掌握Swing常用组件的属性设置及基本操作常用基本组件:JLabel//标签JTextField//文本字段JPasswordField//口令字段JTextArea//文本域JButton//按钮JRadioButton//单选按钮JCheckBox//复选框JList//列表JMenu//菜单学习内容CompanyLogoSwing组件创建及使用的一般流程为:创建一个新组件添加组件到某一中间容器或顶层容器中对容器中的组件进行布局管理对组件添加事件处理组件处理流程CompanyLogoSwing标签、文本与按钮JLabel标签JTextField文本字段JPasswordField口令字段JButton按钮JPanel面板JTextArea文本区域各组件/容器对象的属性设置控件类型/变量名称属性名属性值窗体JFrametitle用户注册界面代码->窗体大小策略生成调整大小代码->生成中心√面板jPanel1borderTitledBorder->标题:用户注册标签jLabel1text用户名:标签jLabel2text密码:标签jLabel3text个人说明:文本字段UserNameTexttext空,用于输入用户名口令字段PasswordTexttext空,用于输入密码echoChar*文本区域UserInfoText用于输入个人说明按钮okButtontext提交按钮cancleButtontext取消程序功能点击“提交”按钮:1、若没有输入用户名或密码2、输入用户名和密码事件处理

privatevoidokButtonActionPerformed(java.awt.event.ActionEvent

evt){Stringusername=UserNameText.getText().trim();Stringpassword=PasswordText.getPassword().toString();if(username.equals("")||password.equals("")){

JOptionPane.showMessageDialog(this,"你还没有输入用户名或密码!");}else{

JOptionPane.showMessageDialog(this,"恭喜你注册成功,你的用户名为:"+username);System.exit(0);}}事件处理点击“取消”按钮:退出程序

privatevoidcancleButtonActionPerformed(java.awt.event.ActionEventevt){System.exit(0);}标签JLabel常用方法如下:get/setText():获取/设置标签的文本。get/seticon():获取/设置标签的图片。get/setHorizontalAlignment():获取/设置文本的水平位置。get/setVerticalAlignment():获取/设置文本的垂直位置。get/setDisplayedMnemonic():获取/设置标签的访问键(下划线文字)。get/setLableFor():获取/设置这个标签附着的组件,所以当用户按下Alt+访问键时,焦点转移到指定的组件。按钮JButton

JButton的常用构造方法有:JButton(Icon

icon)

创建一个带图标的按钮。JButton(String

text)

创建一个带文本的按钮。JButton(String

text,Icon

icon)

创建一个带初始文本和图标的按钮。JButton的常用成员方法有:get/setText()获取/设置标签的文本。get/seticon()获取/设置标签的图片。get/setHorizontalAlignment()获取/设置文本的水平位置。get/setVerticalAlignment()获取/设置文本的垂直位置。get/setDisplayedMnemonic()获取/设置访问键(下划线字符),与Alt按钮组合时,造成按钮单击。文本框JTextField

JTextField是单行文本输入框,主要用来接收用户的输入。JTextField的常用构造方法为:JTextField()构造一个列数为0的文本框。JTextField(intcolumns)构造一个指定列数的文本框。JTextField(Stringtext)构造一个指定文本的文本框。JTextField(Stringtext,intcolumns)构造一个指定文本和列数的文本框。常用方法有:set/getText()设置/获取文本框内容。set/getFont(Fontf)设置/获取当前字体。set/getHorizontalAlignment()设置/获取水平对齐方式。set/getColumns()设置/获取JTextField

中的列数。密码框JPasswordField

一种特殊类型的文本框,JPasswordField

是JTextField

的子类,其构造方法也是类似的。用户可以向密码框中输入文本并加以编辑,和文本框不同的是,向密码框中输入文本时,显示的不是实际输入的文本,而是特殊的回显字符(通常是‘*’)。可以使用setEchoChar(charc)方法或设置它的echoChar属性来改变缺省的回显字符。JPasswordField的构造方法与JTextField的基本一致,常用成员方法中要注意的是JTextField获取文本框中文本使用的是getText(),该方法返回的是一个String类型的对象;而要取得密码框中的文本,使用方法getPassword(),该方法返回的是一个char数组。文本域JTextArea

JTextArea常用构造方法有:JTextArea()构造行数和列数为0的文本域。JTextArea(introws,intcolumns)构造具有指定行数和列数的文本域。JTextArea(Stringtext)构造具有初始文本的文本域。JTextArea(Stringtext,introws,intcolumns)构造具有指定行数和列数,并有初始文本的文本域。常用的成员方法有:append(String

str)

将给定文本追加到文档结尾。insert(String

str,int

pos)

将指定文本插入指定位置。set/getColumns()

设置/获取文本域的列数。set/getRows()

设置/获取文本域的行数。set/getLineWrap()

设置/获取文本区的换行策略。Set/getText()设置/获取文本域内容。setWrapStyleWord(boolean

word)

设置换行方式(如果文本区要换行)。课堂实践-系统登录界面设计程序界面:程序功能假定用户名和密码均为ccit,若没有输入用户名和密码,点击“确定”后显示如下图若输入的用户名和密码不正确,点击“确定”后显示如下图程序功能若输入正确用户名和密码,点击“确定”后显示如下图点击“退出”后退出程序综合实践(标签、文本框、按钮)编写一个实现加、减、乘、除四则运算的计算器程序,用四个按钮分别表示+、-、*、/运算,在两个文本框中输入数据,单击按钮后,在第三个文本框中显示运算结果。程序功能提示:编写这个程序需要对四个按钮的动作事件做出响应,因为它们所处理的事件是一致的,所以我们不需要定义4个事件,这里可以定义一个共同的动作事件,在此事件处理代码中,去区分是哪个按钮被单击了,并以此执行相应的运算。开启/关闭按钮JToggleButtonJTextArea文本区域JToggleButton开启/关闭按钮程序功能单击”设置背景”按钮,将文本区域背景色设为红色,并且,开启/关闭按钮上的文本变为”取消背景”单击”取消背景”按钮,将文本区域背景红色取消,重新设为白色,并且,开启/关闭按钮上的文本变为”设置背景”事件处理单选按钮与复选框JRadioButton单选按钮JComboBox组合框JCheckBox复选框JTextArea文本区域各组件/容器对象的属性设置控件类型/变量名称属性名属性值窗体JFrametitle个人问卷调查resizablefalse面板jPanel1borderTitledBorder->标题:请选择标签jLabel1text性别标签jLabel2text爱好标签jLabel3text系别按钮组buttonGroup1单选按钮mailRadiolabel/text男单选按钮femailRadiolabel/text女复选框singChecklabel/text唱歌复选框dancingChecklabel/text跳舞复选框netChecklabel/text上网复选框sportChecklabel/text运动组合框DepartmentCombomodel软件学院

信息管理系

电子与电气工程学院

机电系

艺术系

外语系

网络通信学院selectedItem软件学院文本区域resultText

用于显示选择结果事件处理-单选按钮(选择“性别”)添加性别单选按钮的事件(ActionPerformed或ItemStateChanged或MouseClick等)代码,当用户单击性别男或性别女(单选按钮)均会触发如下事件。二者均可,只需一个:性别单选按钮的事件事件处理-复选框(选择“爱好”)程序运行后,当用户单击“爱好”JCheckBox中的任何一个控件时,都将触发interestingItemStateChanged事件。该事件将读取选择的爱好信息并将其显示在JTextArea中。其中flag为全局变量(boolean型),控制“爱好”显示格式事件处理-组合框(选择“系别”)单选按钮JRadioButton

JRadioButton的构造方法有:JRadioButton(Icon

icon)

创建一个初始未选择、具有指定的图像单选按钮。JRadioButton(Icon

icon,boolean

selected)

创建一个具有指定图像和选择状态的单选按钮JRadioButton(String

text)

创建一个具有指定文本的状态为未选择的单选按钮。JRadioButton(String

text,boolean

selected)

创建一个具有指定文本和选择状态的单选按钮。JRadioButton(String

text,Icon

icon)

创建一个具有指定的文本和图像并初始化为未选择的单选按钮JRadioButton(String

text,Icon

icon,boolean

selected)

创建一个具有指定的文本、图像和选择状态的单选按钮。常用成员方法有:setSeletcted(booleanselected)设置按钮是否被选中isSelected()返回单选按钮的当前状态复选框JCheckBox

JCheckBox的构造方法有:JCheckBox()

创建一个没有文本、没有图标并且最初未被选定的复选框。JCheckBox(Icon

icon)

创建有一个图标、最初未被选定的复选框。JCheckBox(Icon

icon,boolean

selected)

创建一个带图标的复选框,并指定其最初是否处于选定状态JCheckBox(String

text)创建一个带文本的、最初未被选定的复选框。JCheckBox(String

text,boolean

selected)

创建一个带文本的复选框,并指定其最初是否处于选定状态。JCheckBox(String

text,Icon

icon)

创建带有指定文本和图标的、最初未选定的复选框。JCheckBox(String

text,Icon

icon,boolean

selected)创建一个带文本和图标的复选框,并指定其最初是否处于选定状态常用成员方法有:setSeletcted(booleanselected)设置按钮是否被选中isSelected()返回单选按钮的当前状态组合框JComboBoxJComboBox的构造方法JComboBox():构造一个JComboBoxJComboBox(finalObjectitems[]):构造一个JComboBox,以数组items为选项.JComboBox(Vectoritems):构造一个JComboBox,以向量items为选项JComboBox(ComboBoxModelmodel):构造一个JComboBox,以model为模型组合框JComboBox常用方法voidaddItem():添加一个选项voidinsertItemAt(Object

anObject,int

index)在项列表中的给定索引处插入项。voidremoveItem(Object

anObject)从项列表中移除项。voidremoveItemAt(int

anIndex)移除anIndex

处的项。ObjectgetItemAt(inti):返回位置i处的选项int

getItemCount():返回选项总数int

getSelectIndex():返回选中的选项位置ObjectgetSelectedItem():返回选中的选项voidsetEditable(Boolean

aFlag):设置可修改课堂实践实现一个市场调查程序,功能如图所示。主界面点击“提交”后JList可以让用户在多个条目中作出选择,选择模式可以是单一选择、连续选择、多项选择选择模式对应于

ListSelectionModel

中的3个常量:SINGLE_SELECTION只能选择一条。SINGLE_INTERVAL_SELECTION按住[Shift]键可选择联系的区间。MULTIPLE_INTERVAL_SELECTION按住[Ctrl]键可选择多条。

常用组件-JListCompanyLogo构造方法:JList(ListModelmodel)构造一个指定模式的JList对象JList(Object[]items)利用数组对象构造一个JList对象JList(Vectoritems)利用Vector对象构造一个JList对象常用方法:int

getSelectedIndex()返回列表中的第一个被选择的项目的索引,-1表示没有项目被选。ObjectgetSelectedValue()返回JList列表中的第一个被选择的项目的名字。isSelectedIndex(int

index)判断第index项是否被选。setSelectedIndex(int

index)选择第index项。setSelectionMode(int

selectionMode)设置列表的选择模式常用组件-JListCompanyLogo示例JList列表课堂实践JList列表JTextArea文本域程序主界面课堂实践-功能实现“添加”按钮:将左侧列表中选中的部门加入到右侧的文本区域,若右侧的文本区域已经存在该部门,则不加入并提示”已存在”的信息.课堂实践-功能实现“删除”按钮:将左侧列表中选中的部门从右侧的文本区域中删除,若右侧的文本区域没有该部门,则提示”没有该部门”的信息.每个菜单组件包括一个菜单条(JMenuBar),每个JMenuBar由若干个菜单项(JMenu)组成每个JMenu又由若干个子菜单项(JMenuItem)组成。JFrame提供下列方法设置菜单栏:

voidsetJMenuBar(JMenuBar

mb)示例:

JFrameframe=newJFrame();

JMenuBar

mb=newJMenuBar();

f.setMenuBar(mb);常用组件-菜单CompanyLogo一个窗体中最多只能有一个JMenuBar构造方法:JMenuBar()创建一个菜单栏常用方法:JMenuadd(JMenumenu)添加指定菜单到菜单栏JMenugetMenu(intindex)返回指定的菜单项intgetMenuCount()返回菜单的总数常用组件-JMenuBarCompanyLogo构造方法:JMenu()创建一个没有标题的菜单JMenu(Strings)创建标题为s的菜单常用方法:JMenuItemadd(JMenuItemitem)将菜单项item加入菜单末尾voidaddSeperator()向菜单添加一个分隔符voidremove(intindex)删除索引为index的菜单项voidremove(JMenuItemitem)删除指定菜单项JMenuItemadd(JMenuItemitem,intindex)向指定位置插一个菜单项常用组件-JMenuCompanyLogo构造方法:JMenuItem(Stringtext)创建一个标题为text的菜单项JMenuItem(Stringtext,Iconicon)创建带图标和文本的菜单

常用方法:voidsetText(Stringlab)设定标题为labvoidsetEnabled(booleanb)设定菜单项是否可用,true可用,false为不可用voidsetAccelerator(KeyStrokekey)指定菜单上的快捷键常用组件-JMenuItemCompanyLogo⑴创建一个菜单栏,并将菜单栏置于窗体中⑵在菜单栏中添加菜单⑶在菜单中添加菜单项课堂演示CompanyLogo按要求完成如下图所示的界面。课堂实践CompanyLogo事件处理编辑菜单—剪切编辑菜单—复制事件处理编辑菜单—粘贴事件处理编辑菜单—删除、全选、时间/日期事件处理格式菜单—字体、字形、字号事件处理格式菜单—文本颜色思考:文件菜单的实现?常用组件的使用步骤创建组件对象设置相关属性添加到容器中小结第三讲

——布局管理器

使用NetBeans开发Swing应用程序引入在上一讲的课堂实践中,设计界面时该如何布局比较合理?布局管理器的相关基础知识FlowLayoutBorderLayoutGridLayoutCardLayoutnull单元学习内容CompanyLogoJava为了实现跨平台的特性并且获得动态的布局效果,将容器内的所有组件的大小、位置、顺序、间隔等交给“布局管理器”负责管理。不同的布局管理器使用不同算法和策略,程序可以选择不同的布局管理器来决定布局,主要有FlowLayout,BorderLayout,GridLayout,CardLayout,BoxLayou,GridBagLayout,null等。通过容器组件的setLayout()方法可以设定容器中组件排放策略,如:setLayout(newBorderLayout());setLayout(null);布局管理器80布局管理器布局管理器主要负责以下几个方面:确定容器的全面尺寸;确定容器内各元素的大小;确定容器内各元素的位置;确定元素间的间隔距离。布局管理器决定容器中组件的排列方式,布局管理器都实现了接口LayoutManager接口,可以使用LayoutManager的变量来存储它们中的任何一个。流式布局管理器—FlowLayoutFlowLayout

是JPanel、JApplet的缺省布局管理器。其组件的放置规律是从上到下、从左到右进行放置。当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,其变化规律是:组件的大小不变,但是相对位置会发生变化。如图中有三个按钮都处于同一行,但是如果把该窗口变窄,窄到刚好能够放下一个按钮,则第二个按钮将折到第二行,第三个按钮将折到第三行。按钮"Open"本来在按钮"OK"的右边,但是现在跑到了下面,所以说"组件的大小不变,但是相对位置会发生变化"。81流布局管理器—FlowLayout构造方法:FlowLayout()

居中对齐,水平和垂直间距为5像素的流布局管理器。FlowLayout(int

align)

指定对齐方式,水平和垂直间距为5像素的流布局管理器。FlowLayout(int

align,int

hgap,int

vgap)指定对齐方式及水平和垂直间距的流布局管理器。82常用方法intgetHgap()//返回组件的水平间隔voidsetHgap(inthgap)()//设定组件的水平间隔intgetVgap()//返回组件的垂直间隔voidsetVgap(inthgap)//设定组件的垂直间隔intgetAlignment()//返回组件的对齐方式voidsetAlignment(intalign)//设定组件的对齐方式示例—FlowLayoutBorderLayout是JWindow,JFrame和JDialog的缺省布局管理器。BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。使用BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化。例如容器变高了,则North、South区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽。不一定所有的区域都有组件,如果四周的区域(West、East、North、South区域)没有组件,则由Center区域去补充,但是如果Center区域没有组件,则保持空白:边界布局管理器—BorderLayoutCenterNorthSouthWestEast边界布局管理器—BorderLayout构造方法BorderLayout()//建立一个BorderLayout对象,组件间隔默认,水平垂直为0。BorderLayout(int

hgap,int

vgap)//建立一个BorderLayout对象,参数设定水平垂直间隔。常用方法int

getHgap()//返回组件水平间隔voidsetHgap(int

hgap)//设定组件水平间隔int

getVgap()//返回组件垂直间隔voidsetVgap(int

vgap)//设定组件垂直间隔

85新建窗体,在窗体中添加三个按钮,分别使用FlowLayout和BorderLayout进行布局管理.对两种布局特点进行总结课堂实践CompanyLogo网格布局管理器—GridLayout使容器中各个组件呈网格状布局,平均占据容器的空间,将容器空间划分成nxm的大小相同的小格,每格区间放一个组件,按序存放(从左至右,从上至下)。示例:JFramef=newJFrame(“GridLayout”);

f.setLayout(newGridLayout(2,3));

//容器平均分成2行3列共6格

f.add(newJButton("1"));//添加到第一行的第一格

f.add(newJButton("2"));//添加到第一行的下一格

...

f.add(newJButton("6"));//添加到第二行的第三格87网格布局管理器—GridLayout构造方法GridLayout()//建立一个GridLayout对象,在一行中排列组件,组件之间的默认间隔为0GridLayout(int

rows,intcols)//建立一个GridLayout对象,将容器分为rows行,cols列,组件之间的水平和垂直间隔为0GridLayout(int

rows,int

cols,int

hgap,int

vgap)//建立一个GridLayout对象,将容器分为rows行,cols列,设定组件之间的水平和垂直间隔常用方法int

getColumns()//返回设定列数voidsetColumns(intcols)//设定列数int

getRows()//返回设定行数voidsetRows(introws)//设定行数int

getHgaps()//返回设定水平间隔voidsetHgaps(int

hgap)//设定水平间隔int

getVgap()//返回设定垂直间隔voidsetVgap(int

vgap)//设定垂直间隔88卡片布局管理器—CardLayoutCardLayout将容器中的所有组件象扑克牌一样堆叠在一起,每次只能看到最上面的一张,要看到别的,要用相关

方法。构造方法CardLayout()//建立一个CardLayout对象,组件之间间隔默认为0CardLayout(int

hgap,int

vgap)//建立一个CardLayout对象,组件之间设定间隔89常用方法voidfirst(Containercont)//显示容器cont的第一个对象voidlast(Containercont)//显示容器cont的最后一个对象voidnext(Containercont)//显示容器cont的下一个对象voidprevious(Containercont)//显示容器cont的前一个对象voidshow(Containercont,Stringname)//显示容器cont中名为name的对象intgetHgap()//返回组件水平间隔voidsetHgap(inthgap)//设定组件水平间隔intgetVgap()//返回组件垂直间隔voidsetVgap(inthgap)//设定组件水平间隔卡片布局管理器—CardLayoutCompanyLogo91null称为无布局管理器。可以随心所欲安排容器,但是跨平台时,可能发生变化。容器的嵌套

容器中再添加容器,这样就形成了容器的嵌套。示例:

f=newFrame(“GUIexample3”);

bw=newButton(“West”);

bc=newButton("Workspaceregion");

f.add(bw,BorderLayout.WEST);

f.add(bc,BorderLayout.CENTER);

p=newPanel();

f.add(p,"North");

bfile=newButton("File");

bhelp=newButton("Help");

p.add(bfile); p.add(bhelp);

f.pack();

f.setVisible(true);容器的嵌套92课后实践CompanyLogo设计一个简易计算器,并实现基本功能。小结JFrame的缺省布局管理器为BorderLayout。JPanel

的缺省布局管理器为FlowLayout。当把JPanel

作为一个组件添加到某个容器中后,该JPanel

仍然可以有自己的布局管理器。因此,可以利用JPanel

使得BorderLayout

中某个区域显示多个组件,达到设计复杂用户界面的目的。如果采用无布局管理器setLayout(null),则必须使用setLocation(),setSize(),setBounds()等方法手工设置组件的大小和位置,此方法会导致平台相关,不鼓励使用。

94第四讲

——事件处理机制使用NetBeans开发Swing应用程序回顾与引入CompanyLogo常用容器Swing常用组件布局管理器输入用户名和密码后,单击“确定”,能做出正确判断和响应?事件处理基本原理事件处理步骤事件监听器类定义事件响应处理事件适配器单元学习内容CompanyLogo图形用户界面识别和区分鼠标和键盘的操作并做出相应的反映。Java语言将每一个键盘或鼠标的操作定义为一个“事件”,在编程中只需定义每个特定事件发生时程序应该做出何种响应即可。这是图形用户界面中的“事件”和“事件响应”事件处理模型CompanyLogo除了鼠标和键盘的操作,图形界面等元素都可以引发事件,系统对这些事件分别定义处理代码,以保证系统有序地工作。事件处理模型Java的事件处理机制:一个产生事件的对象必须设定其事件处理的监听者对象(Listener),当事件发生时,监听者便会依据事件的类型来执行相应的程序。要能够让图形界面接收用户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及几类对象:EventSource—事件源,事件发生的场所,通常就是可以激发事件的各个组件,例如按钮、文本框等。Event—事件,用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。Eventhandler—事件处理者,接收事件对象并对其进行处理的对象。99事件及处理机制组件(事件源)触发一个相应类型的事件此事件由相应类型的Listener(事件监听者)接收并处理当事件发生时,监听者根据事件的类型来执行相应的程序。100Button1事件源接收事件e,并做处理ActionListener事件监听者创建ActionEvente单击通过调用源对象的addActionListener()方法将监听器连接到事件源上一个事件监听器对象需和某个事件源的某种事件进行关联,这称为向事件源注册事件监听器对象。使用授权处理模型进行事件处理的一般方法归纳如下:⑴对于某一类型的事件XXXEvent,要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现与该事件相对应的接口XXXListener;⑵事件源实例化以后,必须进行授权,注册该类事件的监听器,使用事件源.addXXXListener(XXXListener)

方法来注册监听器。

事件及处理机制CompanyLogo事件及处理机制CompanyLogo事件类层次结构CompanyLogo所有事件的父类事件处理步骤1.根据需要定义相应类型的监听者类,在类的定义中完成事件的处理;2.创建事件监听者对象;3.为将会触发事件的组件C注册相应的事件监听者对象(使用C的addXXXListener()方法)。104实现相应的监听接口105AWT事件监听器及接口定义事件监听器的几种方法自身类作为事件监听器在类头部加上“implements监听接口”,类体中实现接口中的方法,完成事件处理。监听对象可以使用this表示外部类作为事件监听器定义一个独立的类实现监听接口,完成事件处理创建类的对象表示监听对象匿名内部类作为事件监听器注册监听对象时,直接创建监听对象并给出类体实现事件处理内部类作为事件监听器将监听类定义放到自身类内部定义

107定义事件监听器说明可以声明多个接口,接口之间用逗号隔开……implementsMouseMotionListener,MouseListener,WindowListener;可以由同一个对象监听一个事件源上发生的多种事件:f.addMouseMotionListener(this);f.addMouseListener(this);f.addWindowListener(this);

则对象f上发生的多个事件都将被同一个监听器接收和处理。定义事件监听器说明可以通过事件对象获得详细资料,比如本例中就通过事件对象获得了鼠标发生时的坐标值。publicvoidmouseDragged(MouseEvente){

Strings="Mousedragging:X="+e.getX()+"Y="+e.getY();

tf.setText(s);}无论实现了几个接口,接口中已声明的方法必须一一实现,如果对某事件不感兴趣,可以不具体实现其方法,而用空的方法体来代替。108109注册事件监听器要使组件能够响应相应事件,必须将该组件注册到监听器上。一个组件可以注册多个监听器。AWT的组件类中提供注册和注销监听器的方法:注册监听器:

publicvoidadd<ListenerType>(<ListenerType>

listener);注销监听器:

publicvoidremove<ListenerType>(<ListenerType>

listener);

110按钮单击事件示例importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classButtonHandlerimplementsActionListener{ publicvoidactionPerformed(ActionEvent

argo){

System.out.println("按钮被按下"); }}publicclassEventDemo{ public

温馨提示

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

评论

0/150

提交评论