java GUI日历记事本设计_第1页
java GUI日历记事本设计_第2页
java GUI日历记事本设计_第3页
java GUI日历记事本设计_第4页
java GUI日历记事本设计_第5页
已阅读5页,还剩126页未读 继续免费阅读

下载本文档

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

文档简介

1、Java高级应用开发高级应用开发钱钱 能能J021104J教学目标教学目标l掌握窗体、菜单的设计掌握窗体、菜单的设计l掌握布局的应用掌握布局的应用l掌握基本组件的应用掌握基本组件的应用l掌握各种事件的处理掌握各种事件的处理l掌握文件的读写掌握文件的读写教学内容教学内容l1.1 日历记事本项目介绍日历记事本项目介绍l1.2 窗体的设计窗体的设计l1.3 菜单的设计菜单的设计l1.4 布局的应用布局的应用l1.5 常用组件的使用常用组件的使用l1.6 各种事件的处理各种事件的处理l1.7 文件的读写文件的读写l1.8 项目的打包项目的打包学习重点学习重点l首先应熟练掌握首先应熟练掌握GUI设计中各

2、种组件的方法设计中各种组件的方法l掌握窗体、菜单、布局和事件处理的步骤掌握窗体、菜单、布局和事件处理的步骤l理解理解GUI图形设计的思路与分析方法图形设计的思路与分析方法1.1 日历记事本项目介绍日历记事本项目介绍1.1.1 软件需求分析软件需求分析l所谓所谓“需求分析需求分析”,是指对要解决的问题进行详细,是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。可以说,据,要得到什么结果,最后应输出什么。可以说,在软件工程当中的在软件工程当中的“需求分析需求分析”就是确定要计算机就是确定要计算机“做

3、什么做什么”。l软件需求包括三个不同的层次:业务需求、用户需软件需求包括三个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求)。求和功能需求(也包括非功能需求)。 l1业务需求(业务需求(business requirement)反映了组织机构)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。与范围文档中予以说明。 l2用户需求用户需求(user requirement) 文档描述了用户使用产文档描述了用户使用产品必须要完成的任务,这在使用实例(品必须要完成的任务,这在使用实例(use case)

4、文档)文档或方案脚本说明中予以说明。或方案脚本说明中予以说明。 l3功能需求功能需求(functional requirement)定义了开发人员必定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。足了业务需求。需求分析需求分析l需求分析的方法需求分析的方法l首先调查组织机构情况首先调查组织机构情况 ,包括了解该组织的部门组成情包括了解该组织的部门组成情况,各部门的职能等,为分析信息流程作准备。况,各部门的职能等,为分析信息流程作准备。l然后调查各部门的业务活动情况然后调查各部门的业务活动情况 ,包括了解各个部门输

5、包括了解各个部门输入和使用什么数据,如何加工处理这些数据,输出什么信入和使用什么数据,如何加工处理这些数据,输出什么信息,输出到什么部门,输出结果的格式是什么。息,输出到什么部门,输出结果的格式是什么。 l协助用户明确对新系统的各种要求协助用户明确对新系统的各种要求,包括信息要求、处理,包括信息要求、处理要求、完全性与完整性要求。要求、完全性与完整性要求。 l确定新系统的边界,确定新系统的边界,确定哪些功能由计算机完成或将来准确定哪些功能由计算机完成或将来准备让计算机完成,哪些活动由人工完成。由计算机完成的备让计算机完成,哪些活动由人工完成。由计算机完成的功能就是新系统应该实现的功能。功能就是

6、新系统应该实现的功能。 l常用方法:跟班作业、开调查会、请专人介绍、询常用方法:跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录等问、设计调查表请用户填写、查阅记录等日历记事本的需求分析日历记事本的需求分析1、日历展示功能:2、日志备注功能:1.1.2 软件概要设计软件概要设计l概要设计概要设计的主要任务是把需求分析得到的的主要任务是把需求分析得到的DFD转换为软件结构和数据结构。转换为软件结构和数据结构。l设计软件结构的具体任务是:设计软件结构的具体任务是:将一个复杂系统按将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用功能进行模块划分、建立模块的层次结构及调用

7、关系、确定模块间的接口及人机界面等。关系、确定模块间的接口及人机界面等。l数据结构设计包括数据结构设计包括数据特征的描述、确定数据的数据特征的描述、确定数据的结构特性、以及数据库的设计。显然,总体设计结构特性、以及数据库的设计。显然,总体设计建立的是目标系统的逻辑模型,与计算机无关。建立的是目标系统的逻辑模型,与计算机无关。 概要设计概要设计l界面如何布局?界面如何布局?l如何通过类描述日期?如何通过类描述日期?1.1.3 软件详细设计软件详细设计l详细设计的任务详细设计的任务是设计每个模块的实现算法、所需是设计每个模块的实现算法、所需的局部数据结构。的局部数据结构。详细设计的目标详细设计的目

8、标有两个:实现模有两个:实现模块功能的算法要逻辑上正确和算法描述要简明易懂。块功能的算法要逻辑上正确和算法描述要简明易懂。 l主要任务:主要任务: l1为每个模块确定采用的算法,选择某种适当的工具表为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;达算法的过程,写出模块的详细过程性描述; l2确定每一模块使用的数据结构;确定每一模块使用的数据结构; l3确定模块接口的细节,包括对系统外部的接口和用户确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口,以及模块输入数据、界面,对系统内部其它模块的接口,以及模块输入数据、输出数据及局部数

9、据的全部细节。输出数据及局部数据的全部细节。 l4要为每一个模块设计出一组测试用例,以便在编码阶要为每一个模块设计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试,模块的测试用段对模块代码(即程序)进行预定的测试,模块的测试用例是软件测试计划的重要组成部分,通常应包括输入数据,例是软件测试计划的重要组成部分,通常应包括输入数据,期望输出等内容。期望输出等内容。 实验实验1 JAVA基础复习基础复习l类的封装与继承类的封装与继承ljava.util.Calendar的介绍的介绍http:/ date = Calendar.getInstance(); l设置日期设置日期ldate

10、.set(year,month-1,1);l获取当前月第一天是星期几获取当前月第一天是星期几lint xq=date.get(Calendar.DAY_OF_WEEK)-1;展示某年某月的日历分布展示某年某月的日历分布2010.10日日一一二二三三四四五五六六12345678910111213141516171819202122232425262728293031任务一:获得当任务一:获得当前月的第一天是前月的第一天是星期几星期几任务二:获得当任务二:获得当前月的天数前月的天数任务三:将日历任务三:将日历分布保存在数组分布保存在数组中中任务四:输出数任务四:输出数组中的内容组中的内容首先,如何

11、描述日历类首先,如何描述日历类MyCalendarl年年 yearl月月 monthl日日 dayl日历日历 dayslsetYear() lgetYear()lsetMonth()lgetMonth()lsetDay()lgetDay()linitDays():创建并初始化创建并初始化lsetDays():完成任务完成任务1-3lgetDays():返回日历返回日历任务一:获得当前月的第一天是星期几任务一:获得当前月的第一天是星期几l创建日历实例对象创建日历实例对象lCalendar date=Calendar.getInstance();l设置日历的年和月(设置日历的年和月(注意月份减一注

12、意月份减一)ldate.set(year,month-1,1);l获取当前月第一天是星期几获取当前月第一天是星期几lint xq=date.get(Calendar.DAY_OF_WEEK)-1;l思考思考l为什么设置月份要减为什么设置月份要减1?l为什么计算星期时也要减为什么计算星期时也要减1?任务二:获得当前月的天数任务二:获得当前月的天数l如果是如果是1、3、5、7、8、10、12月,则天数月,则天数为为31天;天;l如果是如果是4、6、9、11月,则天数为月,则天数为30天;天;l如果是如果是2月,且闰年,天数为月,且闰年,天数为29天,不闰年,天,不闰年,天数为天数为28天。天。任务

13、三:将日历分布保存在数组中任务三:将日历分布保存在数组中lfor(int i=xq,n=1;ixq+day;i+) daysi=String.valueOf(n); n+;/用用n来表示日历显示的内容来表示日历显示的内容 任务四:输出数组中的内容任务四:输出数组中的内容l输出输出2010年年10月的日历分布月的日历分布日日一一二二三三四四五五六六12345678910 11 121314151617 18 192021222324 25 2627282930311.2 窗体的设计窗体的设计l窗体框架顶层容器组件由窗体框架顶层容器组件由javax.swingjavax.swing包中的包中的JF

14、rameJFrame类或者类或者java.awtjava.awt包中的包中的FrameFrame类提供。类提供。因此在定义窗体类时,必须首先引用因此在定义窗体类时,必须首先引用javax.swingjavax.swing包中的包中的JFrameJFrame类或者类或者java.awtjava.awt包包中的中的FrameFrame类。类。1.2.1 AWT与与SWINGl图形用户界面(图形用户界面(GUI,Graphical User Interface)是为应用程序提供一个图形化的界面,程序通过是为应用程序提供一个图形化的界面,程序通过GUI与用户交互,与用户交互,GUI能使一个应用程序具有

15、与众能使一个应用程序具有与众不同的不同的“外观外观”与与“感觉感觉”。lJAVA中提供中提供GUI组件的包有组件的包有AWT和和SWINGlAWT:依赖平台,不同平台上外观和风格不同,不依赖平台,不同平台上外观和风格不同,不易做出美观的界面易做出美观的界面(java.awt.*)lSWING:不依赖平台,不同平台上具有相同的外观不依赖平台,不同平台上具有相同的外观和风格和风格(javax.swing.*)lAWT与与SWING基本具有相同的组件,如:基本具有相同的组件,如:Button和和JButton,Frame和和JFrame1.2.2 组件与容器的概念及关系组件与容器的概念及关系lJav

16、aJava把由把由ComponentComponent类的子类或间接子类创建类的子类或间接子类创建的对象称为一个的对象称为一个组件,可分为容器组件和基组件,可分为容器组件和基本组件本组件。把由。把由ContainerContainer的子类或间接子类创的子类或间接子类创建的对象称为一个建的对象称为一个容器容器l两者之间的关系:两者之间的关系:l容器类是组件类的抽象子类,即容器本身也是组容器类是组件类的抽象子类,即容器本身也是组件;件;l容器中可以装入其他容器或者基本组件。容器中可以装入其他容器或者基本组件。1.2.3 组件的分类组件的分类l顶层容器组件顶层容器组件l包括JFrame、JAppl

17、et、JDialog和JWindowl可以独立存在,每个界面应属于一个顶层容器l中间容器组件中间容器组件lJPanel、JScrollPane、JSplitPane、JTabbedPane和JToolBar等。l中间容器必须依附于顶层容器或其他中间容器l特殊容器组件特殊容器组件(一些特殊的中间容器一些特殊的中间容器)l包括JInternalFrame、JLayeredPane、JRootPane等。l基本组件基本组件l基本组件是用于实现人机交互的组件,包括JButton等。l必须依附于容器。1.2.4 JFrame窗体框架设计窗体框架设计uJFameJFame窗体通过调用方法:窗体通过调用方法

18、:getContentPane()getContentPane(),得到它的内容面板。得到它的内容面板。u如需要将按钮如需要将按钮b1b1加载到窗体加载到窗体myFramemyFrame上,可以上,可以通过以下语句来实现:通过以下语句来实现:umyFrame.getContentPane().add(b1);uContainer con=myFrame.getContentPane(); con.add(b1); JMenuBar ContentPane JFame窗体框架的基本结构JFrame常用方法常用方法lJFrame()创建一个无标题的窗口。创建一个无标题的窗口。lJFrame(Str

19、ing s)创建一个标题为创建一个标题为s s的窗口。的窗口。lpublic void setBounds(int a,int b,int width,int height)设置窗口的位置和大小。设置窗口的位置和大小。lpublic void setSize(int width,int height)设设置窗口大小。置窗口大小。lpublic void setResizable(boolean b)lpublic void setVisible(boolean b)设置窗口设置窗口是否可见,默认为不可见。是否可见,默认为不可见。JFrame常用方法常用方法lpublic void setRes

20、izable(boolean b)设置窗口是设置窗口是否可调整大小,默认为可调整。否可调整大小,默认为可调整。lpublic void setDefaultCloseOperation(int operation)该方法用来设置单击窗体右上角的关闭该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。图标后,程序会做出怎样的处理。 其中的参数其中的参数operationoperation取下列有效值:取下列有效值: 0 0 DO_NOTHING_ON_CLOSE DO_NOTHING_ON_CLOSE 什么也不做。什么也不做。 1 1 HIDE_ON_CLOSE HIDE_ON_CL

21、OSE 隐藏当前窗口。隐藏当前窗口。2 2 DISPOSE_ON_CLOSE DISPOSE_ON_CLOSE 隐藏当前窗口,并释隐藏当前窗口,并释放窗体占有的其它资源。放窗体占有的其它资源。3 3 EXIT_ON_CLOSE EXIT_ON_CLOSE 结束窗体所在的应用程序。结束窗体所在的应用程序。JFrame常用方法常用方法lpublic void setTitle(String str)设置窗口标设置窗口标题为题为strlpublic void setIconImage(Image image)设设置窗口的图标。置窗口的图标。lpublic void pack()用紧凑方式自动设置窗口

22、用紧凑方式自动设置窗口大小。大小。直接利用直接利用JFrame创建窗体框架创建窗体框架l用用JFrame类声明并创建一个窗口类声明并创建一个窗口JFrame f=new JFrame(“标题标题”);l设置窗口的大小设置窗口的大小f.setSize(200,300);l设置窗口可见或显示窗口设置窗口可见或显示窗口f.setVisible(true); 或者或者 f.show();l设置窗口关闭时的方法设置窗口关闭时的方法f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);利用利用JFrame子类创建窗体框架子类创建窗体框架l定义子类继承定义子类继承

23、JFrame,并在子类构造方法中,并在子类构造方法中完成窗体的定义完成窗体的定义class MyFrame extends JFrame MyFrame(String s) super(s);/设置标题设置标题 setBounds(200,300);/设置大小设置大小 setVisible(true);/设置显示设置显示 setDefaultCloseOperation(3);/设置关闭设置关闭 l定义一个主类,并在主类中创建该窗体定义一个主类,并在主类中创建该窗体一个较完整的窗体创建框架一个较完整的窗体创建框架1. import java.awt.*; import java.awt.eve

24、nt.*; import javax.swing.*;2. public class extends 顶层容器顶层容器 implements Listener 3.组件定义及初始化组件定义及初始化4.() /构造方法构造方法 4.1 super(“ ”); /定义窗口名称定义窗口名称 4.2 Container c=getContentPane(); /获得内容窗格获得内容窗格 c.add(组件组件); 4.3 组件组件.addActionListener(this); /按钮注册事件监听器按钮注册事件监听器 4.4 调整显示效果,如调整显示效果,如 setSize(350,200); /设置

25、窗口大小设置窗口大小 setLocation(200,200); / 设置窗口位置设置窗口位置 setVisible(true); /显示窗口显示窗口 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultLookAndFeelDecorated(true);5.实现接口:对接口中要处理的方法编程实现接口:对接口中要处理的方法编程实验实验2 日历记事本窗体设计日历记事本窗体设计l用子类继承用子类继承JFrame的方法创建日历记事本的的方法创建日历记事本的主窗体主窗体CalendarFrame,要求满足条件:,要求满足条件:(1)标题

26、为)标题为“我的日历记事本我的日历记事本”也可以自己也可以自己定义;(定义;(2)窗体大小为()窗体大小为(600,300),并且),并且大小不可以改变;(大小不可以改变;(3)窗体出现在)窗体出现在(100,100)的位置;(的位置;(4)关闭主窗体时退出应用程序。)关闭主窗体时退出应用程序。1.3 菜单的设计菜单的设计l菜单是菜单是GUI中非常重要且常用的部分,它主中非常重要且常用的部分,它主要包括三个部分:要包括三个部分:菜单条菜单条、菜单菜单和和菜单项菜单项。l菜单设计的基本原则是:菜单设计的基本原则是:l菜单条菜单条JMenuBar须放在窗体中须放在窗体中l菜单菜单JMenu须放在菜

27、单条中须放在菜单条中l菜单项菜单项JMenuItem须放在菜单中须放在菜单中1.3.1 JMenuBar菜单条菜单条l首先应注意每个窗体只能放置一个菜单条。首先应注意每个窗体只能放置一个菜单条。l常用方法:常用方法:lJMenuBar()构造方法构造方法lpublic void setJMenuBar(JMenuBar menubar)将菜单将菜单条放到窗体中。条放到窗体中。lpublic void add(MenuI menu) 向菜单条中增加由参数向菜单条中增加由参数menumenu指定的菜单对象。指定的菜单对象。l创建菜单条的步骤:创建菜单条的步骤:l创建菜单条对象创建菜单条对象JMen

28、uBar mb=new JMenuBar();l将菜单条放到窗体将菜单条放到窗体f中中 f.setJMenuBar(mb);1.3.2 JMenu菜单菜单lJMenu(String s) 创建标题为创建标题为s s的菜单。的菜单。lpublic void add(MenuItem item)向菜单增加由参向菜单增加由参数数itemitem指定的菜单选项对象。指定的菜单选项对象。lpublic void add(String s)向菜单增加指定的选项。向菜单增加指定的选项。lpublic JMenuItem getItem(int n)得到指定索引处得到指定索引处的菜单选项。的菜单选项。lpub

29、lic int getItemCount()菜单选项数目。菜单选项数目。lpublic void addSeparator()增加分割条。增加分割条。l创建菜单的步骤:创建菜单的步骤:l声明并创建菜单声明并创建菜单 JMenu m1=new JMenu(“文文件件”);l将菜单放入菜单条中将菜单放入菜单条中 mb.add(m1);1.3.3 JMenuItem菜单项菜单项lJMenuItem(String s) 构造有标题的菜单构造有标题的菜单lJMenuItem(String text, Icon icon) 构造有构造有标题和图标的菜单项标题和图标的菜单项lpublic void setE

30、nabled(boolean b)设置当设置当前菜单项是否可被选择。前菜单项是否可被选择。lpublic String getLabel()得到菜单选项的名字。1.3.3 JMenuItem菜单项菜单项lpublic void setAccelerator(KeyStroke keyStroke)为菜单项设置快捷键。为了向该方法为菜单项设置快捷键。为了向该方法的参数传递一个的参数传递一个KeyStrokeKeyStroke对象,可以使用对象,可以使用KeyStrokeKeyStroke类的类方法:类的类方法:public static KeyStroke getKeyStroke(char k

31、eyChar)返返回一个回一个KeyStrokeKeyStroke对象。对象。 也可以使用也可以使用KeyStrokeKeyStroke类类的类方法:的类方法:public static KeyStroke getKeyStroke(int keyCode, int modifiers)返回一个返回一个KeyStrokeKeyStroke对象,其中参数对象,其中参数keyCodekeyCode取值范取值范围:围: lKeyEvent.VK_A KeyEvent.VK_Z KeyEvent.VK_A KeyEvent.VK_Z 。modifiers modifiers 取值:取值:InputEv

32、ent.ALT_MASKInputEvent.ALT_MASK、InputEvent .CTRL_MASKInputEvent .CTRL_MASK和和InputEvent .SHIFT_MASKInputEvent .SHIFT_MASK。1.3.3 JMenuItem菜单项菜单项l嵌入子菜单嵌入子菜单JMenuJMenu是是JMenuItemJMenuItem的子类,因此菜单项的子类,因此菜单项本身还可以是一个菜单,称这样的菜单项为子菜单。本身还可以是一个菜单,称这样的菜单项为子菜单。l为了使得菜单项有一个图标,可以用图标类为了使得菜单项有一个图标,可以用图标类IconIcon声声明一个图

33、标,然后使用其子类明一个图标,然后使用其子类ImageIconImageIcon类创建一类创建一个图标,如:个图标,如:Icon icon=new ImageIcon(“dog.gif”);Icon icon=new ImageIcon(“dog.gif”);JMenuItem m1=new JMenuItem(“JMenuItem m1=new JMenuItem(“加密狗加密狗,icon);,icon);JMenuItem m1=new JMenuItem(“加密狗加密狗,new ImageIcon(open.gif);创建菜单的过程创建菜单的过程l声明并创建菜单条l声明并创建菜单l声明并

34、创建菜单项,设置菜单项快捷键l将菜单项添加到菜单中l将菜单添加到菜单条中l将菜单条添加到窗口中JMenuBar m=new JMenuBar(); JMenu m1=new JMenu(); JMenuItem m11=new JMenuItem(); m1.add(m11); m.add(m1);this.setJMenuBar(m);实验实验3 日历记事本菜单设计日历记事本菜单设计l完成日历记事本中的菜单设计,其菜单结果完成日历记事本中的菜单设计,其菜单结果如下:如下: 文件文件 编辑编辑 帮助帮助 |_打开打开 |_复制复制 |_帮助主题帮助主题 |_保存保存 |_剪切剪切 |_关于关于

35、 |_退出退出 |_粘贴粘贴实验实验4 多样式菜单及快捷键设计多样式菜单及快捷键设计l菜单图片加载菜单图片加载l为打开和保存菜单添加图标为打开和保存菜单添加图标open.gif和和save.giflm1=new JMenuItem(打开打开,new ImageIcon(open.gif);l菜单快捷键设置菜单快捷键设置lm11.setAccelerator(KeyStroke.getKeyStroke(O); lm12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK);l在保存和退出菜单之间加一个

36、分隔条在保存和退出菜单之间加一个分隔条lm1.addSeparator();l将保存菜单设置为不可用将保存菜单设置为不可用1.4 布局的应用布局的应用l教学内容教学内容lFlowLayout流型布局lGridLayout网格布局lBoxLayout盒式布局lBorderLayout边界布局lCardLayout卡片布局l学习目标学习目标l掌握五种布局的方法和步骤l理解布局设计的重要性及应用布局概述布局概述l当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。我们将分别介绍java.awt包中的FlowLayout、BorderLayout、CardLayout、Gr

37、idLayout布局类和java.swing.border包中的BoxLayout布局类。l对于JFrame窗口,程序只能将组件添加到它的内容面板中,内容面板的默认布局是BorderLayout布局。l容器可以使用方法:setLayout(布局对象);来设置自己的布局。1.4.1 流型布局流型布局FlowLayoutl流型布局的规则:流型布局的规则:l组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左至右排列,每一行中的组件都居中排列,组件之间默认的水平和垂直间隙是5个像素。l如何应用流型布局?如何应用流型布局?l首先创建流型布局对象首先创建流型布局对象l设置布局样式设置布局

38、样式(可省略可省略)l然后将该布局对象应用到容器上然后将该布局对象应用到容器上1、创建流型布局对象、创建流型布局对象l构造方法lFlowLayout()lFlowLayout(int align);lFlowLayout(int align,int hgap,int vgap);lFlowLayout f1=new FlowLayout();lFlowLayout f2=new FlowLayout(0);lFlowLayout f3=new FlowLayout(0,5,5);FlowLayout.LEFT 0FlowLayout.CENTER 1FlowLayout.RIGHT 2设置布局

39、的水平间设置布局的水平间隙和垂直间隙隙和垂直间隙2、设置布局样式、设置布局样式lFlowLayout布局对象调用setAlignment(int aligin)方法可以重新设置布局的对齐方式。l其中aligin可以取值:FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHTlFlowLayout布局对象调用setHgap(int hgap)、setVgap(int vgap) 可以重新设置布局的水平间隙和垂直间隙。3、应用布局对象、应用布局对象l新建一个流布局对象FlowLayout flow=new FlowLayout();l设置其属性flow

40、.setAlignment(FlowLayout.LEFT);flow.setHgap(2);flow.setVgap(8);l容器应用布局con.setLayout(flow);第第1 1、2 2两点可以综合为:两点可以综合为:FlowLayout flow=new FlowLayout(FlowLayout.LEFT,2,8);1.4.2 边界布局边界布局BorderLayoutl BorderLayout BorderLayout 布局是布局是WindowWindow型容器的默认型容器的默认布局,例如布局,例如JFrameJFrame、JDialogJDialog都是都是WindowWi

41、ndow类的类的间接子类,它们的内容面板的默认布局都是间接子类,它们的内容面板的默认布局都是BorderLayoutBorderLayout布局。布局。BorderLayoutBorderLayout也是一种也是一种简单的布局策略,如果一个容器使用这种布简单的布局策略,如果一个容器使用这种布局,那么容器空间简单地划分为局,那么容器空间简单地划分为东、西、南、东、西、南、北、中北、中五个区域,中间的区域最大。五个区域,中间的区域最大。l每加入一个组件都应该指明把这个组件添加每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由在哪个区域中,区域由BorderLayoutBorderLayou

42、t中的静中的静态常量态常量CENTERCENTER、NORTHNORTH、SOUTHSOUTH、WESTWEST、EASTEAST表示,例如,一个使用表示,例如,一个使用BorderLayoutBorderLayout布局的布局的容器容器concon,可以使用,可以使用addadd方法将一个组件方法将一个组件b b添加添加到中心区域:到中心区域:con.add(b,BorderLayout.CENTERcon.add(b,BorderLayout.CENTER);l注意:注意:添加到某个区域的组件将占据整个这添加到某个区域的组件将占据整个这个区域。每个区域只能放置一个组件,如果个区域。每个区域

43、只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换掉。,那么先前的组件将被后者替换掉。1.4.3 盒式布局盒式布局l用用BoxLayoutBoxLayout类可以创建一个布局对象,称为类可以创建一个布局对象,称为盒式盒式布局布局。BoxLayoutBoxLayout在在java.swing.borderjava.swing.border包中。包中。java java swingswing包提供了包提供了BoxBox类,该类也是类,该类也是ContainerContainer类的一类的一个子类,创建的容器称作一个盒式容器

44、,盒式容器个子类,创建的容器称作一个盒式容器,盒式容器的的默认布局是盒式布局,而且不允许更改盒式容的的默认布局是盒式布局,而且不允许更改盒式容器的布局。因此,在策划程序的布局时,可以利用器的布局。因此,在策划程序的布局时,可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到容器的嵌套,将某个容器嵌入几个盒式容器,达到你的布局目的。你的布局目的。使用盒式布局的容器将组件排列在使用盒式布局的容器将组件排列在一行或一列,这取决于创建盒式布局对象时,是否一行或一列,这取决于创建盒式布局对象时,是否指定了是行排列还是列排列。指定了是行排列还是列排列。盒式布局的两种样式盒式布局的两种样式l行型盒式布局容器

45、中添加的组件的上沿在同行型盒式布局容器中添加的组件的上沿在同一水平线上。一水平线上。lBox b1=Box.createHorizontalBox()Box b1=Box.createHorizontalBox()l列型盒式布局容器中添加的组件的左沿在同列型盒式布局容器中添加的组件的左沿在同一垂直线上。一垂直线上。lBox b2=Box.createVerticalBox()Box b2=Box.createVerticalBox()l如果想控制盒式布局容器中组件之间的距离如果想控制盒式布局容器中组件之间的距离,就需要,就需要createHorizontalStrut(int createHo

46、rizontalStrut(int width)width)可以得到一个不可见的水平可以得到一个不可见的水平StructStruct类类型对象,称做型对象,称做水平支撑水平支撑。该水平支撑的高度。该水平支撑的高度为为0 0,宽度是,宽度是widthwidth。lBoxBox类调用静态方法类调用静态方法createVertialStrut(int createVertialStrut(int height)height)可以得到一个不可见的垂直可以得到一个不可见的垂直StructStruct类类型对象,称做型对象,称做垂直支撑垂直支撑。参数。参数heightheight决定垂决定垂直支撑的高度,

47、垂直支撑的宽度为直支撑的高度,垂直支撑的宽度为0 0。盒式布局的步骤盒式布局的步骤l声明并创建盒式布局声明并创建盒式布局Box boxV1=Box.createVerticalBox(); 或者或者Box baseBox=Box.createHorizontalBox();l向布局中添加组件向布局中添加组件boxV1.add(new JLabel(输入您的姓名输入您的姓名);l设置垂直支撑或水平支撑设置垂直支撑或水平支撑boxV1.add(Box.createVerticalStrut(8); 或者或者 baseBox.add(Box.createHorizontalStrut(10);l设置

48、容器布局设置容器布局con.setLayout(new FlowLayout();l向容器中加载盒式布局向容器中加载盒式布局con.add(baseBox); 实验实验5 日历记事本窗体布局设计日历记事本窗体布局设计列盒布局容器列盒布局容器改变年月容器日历展示容器农历及提示信息容器标签容器日志记事容器保存删除按钮容器星期容器为窗体设置流型布局为窗体设置流型布局l向窗体中添加列盒布局容器向窗体中添加列盒布局容器p1l创建一个面板创建一个面板p1l创建列盒布局创建列盒布局bv1l创建改变年月面板容器创建改变年月面板容器p11l将将p11放入列盒放入列盒bv1中中l创建星期面板容器创建星期面板容器p

49、12l将将p12放入列盒放入列盒bv1中中l创建建日历面板容器创建建日历面板容器p13l将将p13放入列盒放入列盒bv1中中l创建建农历面板容器创建建农历面板容器p14l将将p14放入列盒放入列盒bv1中中l将将bv1加入面板容器加入面板容器p1l将面板将面板p1放入窗体中放入窗体中l向窗体中添加列盒布局容器向窗体中添加列盒布局容器p2l创建一个面板创建一个面板p2l创建列盒布局创建列盒布局bv2l创建标签创建标签dateLabell将将dateLabel放入列盒放入列盒bv2中中l创建日志文本区域容器创建日志文本区域容器notel将将note放入列盒放入列盒bv2中中l创建按钮面板容器创建按

50、钮面板容器p21l将将p21放入列盒放入列盒bv2中中l将将bv2加入面板容器加入面板容器p2l将面板将面板p2放入窗体中放入窗体中1.4.4 卡式布局卡式布局CardLayoutl JTabbedPaneJTabbedPane创建的对象是一个轻容器,称创建的对象是一个轻容器,称作选项卡窗格。选项卡窗格的默认布局是作选项卡窗格。选项卡窗格的默认布局是CardLayoutCardLayout卡片式布局。该容器自带一些选卡片式布局。该容器自带一些选项卡,这些选项卡和容器中添加的组件相对项卡,这些选项卡和容器中添加的组件相对应,也就是说,单击相应的选项卡时,选项应,也就是说,单击相应的选项卡时,选项

51、卡窗格将显示对应的组件。选项卡窗格自带卡窗格将显示对应的组件。选项卡窗格自带的选项卡默认地在该选项卡窗格的顶部,从的选项卡默认地在该选项卡窗格的顶部,从左向右依次排列,选项卡的顺序和容器添加左向右依次排列,选项卡的顺序和容器添加的组件的顺序相同。的组件的顺序相同。l选项卡窗格可以使用:选项卡窗格可以使用: add(String text,Component c);add(String text,Component c);方法将组件方法将组件c c添加到容器当中,并指定和该组件添加到容器当中,并指定和该组件c c对应的选对应的选项卡的文本提示是项卡的文本提示是texttext。l也可以使用构造方

52、法也可以使用构造方法public JTabbedPane(int tabPlancement)public JTabbedPane(int tabPlancement)其中参数指定选项卡的位置其中参数指定选项卡的位置, ,有有JTabbedPane.TOPJTabbedPane.TOP, , JTabbedPane.BOTTOMJTabbedPane.BOTTOM, , JTabbedPane.LEFTJTabbedPane.LEFT和和JTabbedPane.RIGHTJTabbedPane.RIGHTl创建选项卡对象创建选项卡对象JTabbedPane p=new JTabbedPane(

53、JTabbedPane.LEFT);l为选项卡创建并添加页面为选项卡创建并添加页面()p.add(“第第1页页”,new JButton();l加载选项卡到容器中加载选项卡到容器中con.add(p,BorderLayout.CENTER); 1.4.5 网格布局网格布局GridLayoutl网格布局规则:网格布局规则:l将容器划分为大小相同的网格,将容器划分为大小相同的网格,最多可添加mn个组件,每个网格都是相同大小并且强制组件与网格的大小相同(即每个网格只能放一个组件)(即每个网格只能放一个组件);l每个网格中可以添加容器,而这个容器又可以设置为GridLayout布局、FlowLayou

54、t布局、CarderLayout布局或BorderLayout布局等。利用这种嵌套方法,可以设计出符合一定需要的布局。l如何实施网格布局?如何实施网格布局?1、创建网格布局对象、创建网格布局对象l构造方法构造方法GridLayout(int m,int n)GridLayout(int m,int n,int hgap,int vgap)l比如:比如:GridLayout g1=new new GridLayout(10,8);GridLayout g2=new new GridLayout(10,8,5,10);2、将布局应用到容器上、将布局应用到容器上l声明创建网格对象GridLayout

55、 g1=new GridLayout(3,2);l将网格布局应用到容器上con.setLayout(g1);3、向网格布局容器中加组件、向网格布局容器中加组件1.4.6 null空布局空布局 我们可以把一个容器的布局设置为我们可以把一个容器的布局设置为nullnull布局(空布局)。空布局容器可以准确地定布局(空布局)。空布局容器可以准确地定位组件在容器的位置和大小。位组件在容器的位置和大小。setBoundssetBounds(int a,int b,int width,int heightint a,int b,int width,int height)方法方法是所有组件都拥有的一个方法,

56、组件调用该是所有组件都拥有的一个方法,组件调用该方法可以设置本身的大小和在容器中的位置方法可以设置本身的大小和在容器中的位置。例如,。例如,p p是某个容器:是某个容器: p.setLayout(null);p.setLayout(null); 把把p p的布局设置为空布局。的布局设置为空布局。l向空布局的容器p添加一个组件c需要两个步骤,首先使用首先使用add(c)add(c)方法向容器添加组件,方法向容器添加组件,然后组件然后组件c c再调用再调用setBoundssetBounds(int a,int int a,int b,int width,int heightb,int width

57、,int height)方法设置该组件)方法设置该组件在容器中的位置和本身的大小在容器中的位置和本身的大小,组件都是一个矩形结构,方法中的参数a,b是被添加的组件c的左上角在容器中的位置坐标,即该组件距容器左面a个像素,距容器上方b个像素;weidth,height是组件c的宽和高。实验实验6 日历布局设计日历布局设计日日一一二二三三四四五五六六12345678910 11 121314151617 18 192021222324 25 262728293031任务任务1:日历面板布局:日历面板布局l创建星期面板创建星期面板p12l在面板在面板p12上应用上应用17的网格布局的网格布局l创建创

58、建7个标签,并将其放入到个标签,并将其放入到p12中中l将星期面板将星期面板p12放入列盒放入列盒bv1中中l创建日历面板创建日历面板p13l在在p13上应用上应用67的网格布局的网格布局l创建创建42个按钮,并将其放入面板个按钮,并将其放入面板p13中中l将日历面板将日历面板p13放入列盒放入列盒bv1中中任务任务2:改变年月面板设计:改变年月面板设计任务任务3:农历显示面板设计:农历显示面板设计任务任务4:日志按钮面板设计:日志按钮面板设计1.5 常用组件的使用常用组件的使用l标签标签JLabell文本框文本框JTextFieldl密码框密码框JPasswordFieldl文本区域文本区域

59、JTextAreal按钮按钮JButtonl复选框复选框JCheckBoxl单选按钮单选按钮JRadioButtonl中间容器面板中间容器面板JPanell拆分窗格拆分窗格JSplitPanel滚动窗格滚动窗格JScrollPane标签标签JLabellpublic public JLabel()JLabel()创建没有名字的标签。创建没有名字的标签。lpublic public JLabel(String s)JLabel(String s)创建名字是创建名字是s s的标签,的标签,s s在在标签中靠左对齐。标签中靠左对齐。lpublic public JLabel(String s,int

60、 aligment)JLabel(String s,int aligment)参数参数 aligment aligment 决定标签中的文字在标签中的水平对齐方决定标签中的文字在标签中的水平对齐方式。式。lpublic public JLabel(Icon icon)JLabel(Icon icon)创建具有图标创建具有图标iconicon的标的标签,签,iconicon在标签中靠左对齐。在标签中靠左对齐。lpublic public JLabel(String s,Icon icon,int JLabel(String s,Icon icon,int aligment)aligment)创建

温馨提示

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

评论

0/150

提交评论