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

下载本文档

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

文档简介

Java高级应用开发钱能J021104723975921qiansiyuan@163.com教学目标掌握窗体、菜单的设计掌握布局的应用掌握基本组件的应用掌握各种事件的处理掌握文件的读写教学内容1.1日历记事本项目介绍1.2窗体的设计1.3菜单的设计1.4布局的应用1.5常用组件的使用1.6各种事件的处理1.7文件的读写1.8项目的打包学习重点首先应熟练掌握GUI设计中各种组件的方法掌握窗体、菜单、布局和事件处理的步骤理解GUI图形设计的思路与分析方法1.1日历记事本项目介绍1.1.1软件需求分析所谓“需求分析”,是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。可以说,在软件工程当中的“需求分析”就是确定要计算机“做什么”。软件需求包括三个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求)。1.业务需求(businessrequirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。2.用户需求(userrequirement)文档描述了用户使用产品必须要完成的任务,这在使用实例(usecase)文档或方案脚本说明中予以说明。3.功能需求(functionalrequirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。需求分析需求分析的方法首先调查组织机构情况,包括了解该组织的部门组成情况,各部门的职能等,为分析信息流程作准备。然后调查各部门的业务活动情况,包括了解各个部门输入和使用什么数据,如何加工处理这些数据,输出什么信息,输出到什么部门,输出结果的格式是什么。协助用户明确对新系统的各种要求,包括信息要求、处理要求、完全性与完整性要求。确定新系统的边界,确定哪些功能由计算机完成或将来准备让计算机完成,哪些活动由人工完成。由计算机完成的功能就是新系统应该实现的功能。常用方法:跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录等日历记事本的需求分析1、日历展示功能:2、日志备注功能:1.1.2软件概要设计概要设计的主要任务是把需求分析得到的DFD转换为软件结构和数据结构。设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的设计。显然,总体设计建立的是目标系统的逻辑模型,与计算机无关。概要设计界面如何布局?如何通过类描述日期?1.1.3软件详细设计详细设计的任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的目标有两个:实现模块功能的算法要逻辑上正确和算法描述要简明易懂。主要任务:1.为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;2.确定每一模块使用的数据结构;3.确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口,以及模块输入数据、输出数据及局部数据的全部细节。4.要为每一个模块设计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试,模块的测试用例是软件测试计划的重要组成部分,通常应包括输入数据,期望输出等内容。实验1JAVA基础复习类的封装与继承java.util.Calendar的介绍/DocWeb/api/all/java.util.Calendar定义一个日历类MyCalendar用于展示某年某月的日历分布。获得当前月的天数获得当前月的第一天是星期几java.util.Calendar类获取Calendar实例Calendardate=Calendar.getInstance();设置日期date.set(year,month-1,1);获取当前月第一天是星期几intxq=date.get(Calendar.DAY_OF_WEEK)-1;展示某年某月的日历分布2010.10日一二三四五六12345678910111213141516171819202122232425262728293031任务一:获得当前月的第一天是星期几任务二:获得当前月的天数任务三:将日历分布保存在数组中任务四:输出数组中的内容首先,如何描述日历类MyCalendar年year月month日day日历dayssetYear()getYear()setMonth()getMonth()setDay()getDay()initDays():创建并初始化setDays():完成任务1-3getDays():返回日历任务一:获得当前月的第一天是星期几创建日历实例对象Calendardate=Calendar.getInstance();设置日历的年和月(注意月份减一)date.set(year,month-1,1);获取当前月第一天是星期几intxq=date.get(Calendar.DAY_OF_WEEK)-1;思考为什么设置月份要减1?为什么计算星期时也要减1?任务二:获得当前月的天数如果是1、3、5、7、8、10、12月,则天数为31天;如果是4、6、9、11月,则天数为30天;如果是2月,且闰年,天数为29天,不闰年,天数为28天。任务三:将日历分布保存在数组中for(inti=xq,n=1;i<xq+day;i++){ days[i]=String.valueOf(n); n++;//用n来表示日历显示的内容

}任务四:输出数组中的内容输出2010年10月的日历分布日一二三四五六123456789101112131415161718192021222324252627282930311.2窗体的设计窗体框架顶层容器组件由javax.swing包中的JFrame类或者java.awt包中的Frame类提供。因此在定义窗体类时,必须首先引用javax.swing包中的JFrame类或者java.awt包中的Frame类。1.2.1AWT与SWING图形用户界面(GUI,GraphicalUserInterface)是为应用程序提供一个图形化的界面,程序通过GUI与用户交互,GUI能使一个应用程序具有与众不同的“外观”与“感觉”。JAVA中提供GUI组件的包有AWT和SWINGAWT:依赖平台,不同平台上外观和风格不同,不易做出美观的界面(java.awt.*)SWING:不依赖平台,不同平台上具有相同的外观和风格(javax.swing.*)AWT与SWING基本具有相同的组件,如:Button和JButton,Frame和JFrame……1.2.2组件与容器的概念及关系Java把由Component类的子类或间接子类创建的对象称为一个组件,可分为容器组件和基本组件。把由Container的子类或间接子类创建的对象称为一个容器两者之间的关系:容器类是组件类的抽象子类,即容器本身也是组件;容器中可以装入其他容器或者基本组件。1.2.3组件的分类顶层容器组件包括JFrame、JApplet、JDialog和JWindow可以独立存在,每个界面应属于一个顶层容器中间容器组件JPanel、JScrollPane、JSplitPane、JTabbedPane和JToolBar等。中间容器必须依附于顶层容器或其他中间容器特殊容器组件(一些特殊的中间容器)包括JInternalFrame、JLayeredPane、JRootPane等。基本组件基本组件是用于实现人机交互的组件,包括JButton等。必须依附于容器。1.2.4JFrame窗体框架设计JFame窗体通过调用方法:getContentPane(),得到它的内容面板。如需要将按钮b1加载到窗体myFrame上,可以通过以下语句来实现:myFrame.getContentPane().add(b1);Containercon=myFrame.getContentPane();con.add(b1);JMenuBar

ContentPaneJFame窗体框架的基本结构JFrame常用方法JFrame()创建一个无标题的窗口。JFrame(Strings)创建一个标题为s的窗口。publicvoidsetBounds(inta,intb,intwidth,intheight)设置窗口的位置和大小。publicvoidsetSize(intwidth,intheight)设置窗口大小。publicvoid

setResizable(booleanb)publicvoidsetVisible(booleanb)设置窗口是否可见,默认为不可见。JFrame常用方法publicvoidsetResizable(booleanb)设置窗口是否可调整大小,默认为可调整。publicvoidsetDefaultCloseOperation(intoperation)该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。其中的参数operation取下列有效值:

0DO_NOTHING_ON_CLOSE什么也不做。

1HIDE_ON_CLOSE隐藏当前窗口。

2DISPOSE_ON_CLOSE隐藏当前窗口,并释放窗体占有的其它资源。

3EXIT_ON_CLOSE结束窗体所在的应用程序。JFrame常用方法publicvoidsetTitle(Stringstr)设置窗口标题为strpublicvoidsetIconImage(Imageimage)设置窗口的图标。publicvoidpack()用紧凑方式自动设置窗口大小。直接利用JFrame创建窗体框架用JFrame类声明并创建一个窗口JFramef=newJFrame(“标题”);设置窗口的大小f.setSize(200,300);设置窗口可见或显示窗口f.setVisible(true);或者f.show();设置窗口关闭时的方法f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);利用JFrame子类创建窗体框架定义子类继承JFrame,并在子类构造方法中完成窗体的定义classMyFrameextendsJFrame{MyFrame(Strings){super(s);//设置标题

setBounds(200,300);//设置大小

setVisible(true);//设置显示

setDefaultCloseOperation(3);//设置关闭

}}定义一个主类,并在主类中创建该窗体一个较完整的窗体创建框架1.importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;2.publicclass××extends顶层容器implements××Listener{3.组件定义及初始化4.××(){//构造方法

4.1super(“××”);//定义窗口名称

4.2Containerc=getContentPane();//获得内容窗格

c.add(组件);4.3组件.addActionListener(this);//按钮注册事件监听器

4.4调整显示效果,如

setSize(350,200);//设置窗口大小

setLocation(200,200);//设置窗口位置

setVisible(true);//显示窗口

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setDefaultLookAndFeelDecorated(true);}}5.实现接口:对接口中要处理的方法编程实验2日历记事本窗体设计用子类继承JFrame的方法创建日历记事本的主窗体CalendarFrame,要求满足条件:(1)标题为“我的日历记事本”也可以自己定义;(2)窗体大小为(600,300),并且大小不可以改变;(3)窗体出现在(100,100)的位置;(4)关闭主窗体时退出应用程序。1.3菜单的设计菜单是GUI中非常重要且常用的部分,它主要包括三个部分:菜单条、菜单和菜单项。菜单设计的基本原则是:菜单条JMenuBar须放在窗体中菜单JMenu须放在菜单条中菜单项JMenuItem须放在菜单中1.3.1JMenuBar菜单条首先应注意每个窗体只能放置一个菜单条。常用方法:JMenuBar()构造方法publicvoidsetJMenuBar(JMenuBarmenubar)将菜单条放到窗体中。publicvoidadd(MenuImenu)

向菜单条中增加由参数menu指定的菜单对象。创建菜单条的步骤:创建菜单条对象JMenuBarmb=newJMenuBar();将菜单条放到窗体f中f.setJMenuBar(mb);1.3.2JMenu菜单JMenu(Strings)

创建标题为s的菜单。publicvoidadd(MenuItemitem)向菜单增加由参数item指定的菜单选项对象。publicvoidadd(Strings)向菜单增加指定的选项。publicJMenuItemgetItem(intn)得到指定索引处的菜单选项。publicintgetItemCount()菜单选项数目。publicvoid

addSeparator()增加分割条。创建菜单的步骤:声明并创建菜单

JMenum1=newJMenu(“文件”);将菜单放入菜单条中

mb.add(m1);1.3.3JMenuItem菜单项JMenuItem(Strings)

构造有标题的菜单JMenuItem(Stringtext,Iconicon)

构造有标题和图标的菜单项publicvoidsetEnabled(booleanb)设置当前菜单项是否可被选择。publicStringgetLabel()得到菜单选项的名字。1.3.3JMenuItem菜单项publicvoidsetAccelerator(KeyStrokekeyStroke)为菜单项设置快捷键。为了向该方法的参数传递一个KeyStroke对象,可以使用KeyStroke类的类方法:publicstaticKeyStrokegetKeyStroke(charkeyChar)返回一个KeyStroke对象。也可以使用KeyStroke类的类方法:

publicstaticKeyStrokegetKeyStroke(intkeyCode,intmodifiers)

返回一个KeyStroke对象,其中参数keyCode取值范围:KeyEvent.VK_A~KeyEvent.VK_Z。modifiers取值:

InputEvent.ALT_MASK、InputEvent.CTRL_MASK和InputEvent.SHIFT_MASK。1.3.3JMenuItem菜单项嵌入子菜单JMenu是JMenuItem的子类,因此菜单项本身还可以是一个菜单,称这样的菜单项为子菜单。为了使得菜单项有一个图标,可以用图标类Icon声明一个图标,然后使用其子类ImageIcon类创建一个图标,如:Iconicon=newImageIcon(“dog.gif”);JMenuItemm1=newJMenuItem(“加密狗",icon);JMenuItemm1=newJMenuItem(“加密狗",newImageIcon("open.gif"));创建菜单的过程声明并创建菜单条声明并创建菜单声明并创建菜单项,设置菜单项快捷键将菜单项添加到菜单中将菜单添加到菜单条中将菜单条添加到窗口中JMenuBarm=newJMenuBar();

JMenum1=newJMenu();

JMenuItemm11=newJMenuItem();m1.add(m11);

m.add(m1);this.setJMenuBar(m);实验3日历记事本菜单设计完成日历记事本中的菜单设计,其菜单结果如下:文件编辑帮助

|_打开|_复制|_帮助主题

|_保存|_剪切|_关于…|_退出|_粘贴实验4多样式菜单及快捷键设计菜单图片加载为打开和保存菜单添加图标open.gif和save.gifm1=newJMenuItem("打开",newImageIcon("open.gif"));菜单快捷键设置m11.setAccelerator(KeyStroke.getKeyStroke(‘O’));m12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));在保存和退出菜单之间加一个分隔条m1.addSeparator();将保存菜单设置为不可用1.4布局的应用教学内容FlowLayout流型布局GridLayout网格布局BoxLayout盒式布局BorderLayout边界布局CardLayout卡片布局学习目标掌握五种布局的方法和步骤理解布局设计的重要性及应用布局概述当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。我们将分别介绍java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局类和java.swing.border包中的BoxLayout布局类。对于JFrame窗口,程序只能将组件添加到它的内容面板中,内容面板的默认布局是BorderLayout布局。容器可以使用方法:setLayout(布局对象);来设置自己的布局。1.4.1流型布局FlowLayout流型布局的规则:组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左至右排列,每一行中的组件都居中排列,组件之间默认的水平和垂直间隙是5个像素。如何应用流型布局?首先创建流型布局对象设置布局样式(可省略)然后将该布局对象应用到容器上1、创建流型布局对象构造方法FlowLayout()FlowLayout(intalign);FlowLayout(intalign,inthgap,intvgap);FlowLayoutf1=newFlowLayout();FlowLayoutf2=newFlowLayout(0);FlowLayoutf3=newFlowLayout(0,5,5);FlowLayout.LEFT0FlowLayout.CENTER1FlowLayout.RIGHT2设置布局的水平间隙和垂直间隙2、设置布局样式FlowLayout布局对象调用

setAlignment(intaligin)方法可以重新设置布局的对齐方式。其中aligin可以取值:FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHTFlowLayout布局对象调用setHgap(inthgap)、setVgap(intvgap)

可以重新设置布局的水平间隙和垂直间隙。3、应用布局对象新建一个流布局对象FlowLayoutflow=newFlowLayout();设置其属性flow.setAlignment(FlowLayout.LEFT);flow.setHgap(2);flow.setVgap(8);容器应用布局con.setLayout(flow);第1、2两点可以综合为:FlowLayoutflow=newFlowLayout(FlowLayout.LEFT,2,8);1.4.2边界布局BorderLayout

BorderLayout布局是Window型容器的默认布局,例如JFrame、JDialog都是Window类的间接子类,它们的内容面板的默认布局都是BorderLayout布局。BorderLayout也是一种简单的布局策略,如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域,中间的区域最大。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示,例如,一个使用BorderLayout布局的容器con,可以使用add方法将一个组件b添加到中心区域:con.add(b,BorderLayout.CENTER);注意:添加到某个区域的组件将占据整个这个区域。每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换掉。1.4.3盒式布局用BoxLayout类可以创建一个布局对象,称为盒式布局。BoxLayout在java.swing.border包中。javaswing包提供了Box类,该类也是Container类的一个子类,创建的容器称作一个盒式容器,盒式容器的的默认布局是盒式布局,而且不允许更改盒式容器的布局。因此,在策划程序的布局时,可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到你的布局目的。使用盒式布局的容器将组件排列在一行或一列,这取决于创建盒式布局对象时,是否指定了是行排列还是列排列。盒式布局的两种样式行型盒式布局容器中添加的组件的上沿在同一水平线上。Boxb1=Box.createHorizontalBox()列型盒式布局容器中添加的组件的左沿在同一垂直线上。Boxb2=Box.createVerticalBox()如果想控制盒式布局容器中组件之间的距离,就需要createHorizontalStrut(intwidth)可以得到一个不可见的水平Struct类型对象,称做水平支撑。该水平支撑的高度为0,宽度是width。Box类调用静态方法createVertialStrut(intheight)可以得到一个不可见的垂直Struct类型对象,称做垂直支撑。参数height决定垂直支撑的高度,垂直支撑的宽度为0。盒式布局的步骤声明并创建盒式布局BoxboxV1=Box.createVerticalBox();或者BoxbaseBox=Box.createHorizontalBox();向布局中添加组件boxV1.add(newJLabel("输入您的姓名"));设置垂直支撑或水平支撑boxV1.add(Box.createVerticalStrut(8));或者baseBox.add(Box.createHorizontalStrut(10));设置容器布局con.setLayout(newFlowLayout());向容器中加载盒式布局con.add(baseBox);实验5日历记事本窗体布局设计列盒布局容器列盒布局容器改变年月容器日历展示容器农历及提示信息容器标签容器日志记事容器保存删除按钮容器星期容器为窗体设置流型布局向窗体中添加列盒布局容器p1创建一个面板p1创建列盒布局bv1创建改变年月面板容器p11将p11放入列盒bv1中创建星期面板容器p12将p12放入列盒bv1中创建建日历面板容器p13将p13放入列盒bv1中创建建农历面板容器p14将p14放入列盒bv1中将bv1加入面板容器p1将面板p1放入窗体中向窗体中添加列盒布局容器p2创建一个面板p2创建列盒布局bv2创建标签dateLabel将dateLabel放入列盒bv2中创建日志文本区域容器note将note放入列盒bv2中创建按钮面板容器p21将p21放入列盒bv2中将bv2加入面板容器p2将面板p2放入窗体中1.4.4卡式布局CardLayout

JTabbedPane创建的对象是一个轻容器,称作选项卡窗格。选项卡窗格的默认布局是CardLayout卡片式布局。该容器自带一些选项卡,这些选项卡和容器中添加的组件相对应,也就是说,单击相应的选项卡时,选项卡窗格将显示对应的组件。选项卡窗格自带的选项卡默认地在该选项卡窗格的顶部,从左向右依次排列,选项卡的顺序和容器添加的组件的顺序相同。选项卡窗格可以使用:add(Stringtext,Componentc);方法将组件c添加到容器当中,并指定和该组件c对应的选项卡的文本提示是text。也可以使用构造方法publicJTabbedPane(inttabPlancement)其中参数指定选项卡的位置,有JTabbedPane.TOP,JTabbedPane.BOTTOM,JTabbedPane.LEFT和JTabbedPane.RIGHT创建选项卡对象JTabbedPanep=newJTabbedPane(JTabbedPane.LEFT);为选项卡创建并添加页面()p.add(“第1页”,newJButton());加载选项卡到容器中con.add(p,BorderLayout.CENTER);1.4.5网格布局GridLayout网格布局规则:将容器划分为大小相同的网格,最多可添加m×n个组件,每个网格都是相同大小并且强制组件与网格的大小相同(即每个网格只能放一个组件);每个网格中可以添加容器,而这个容器又可以设置为GridLayout布局、FlowLayout布局、CarderLayout布局或BorderLayout布局等。利用这种嵌套方法,可以设计出符合一定需要的布局。如何实施网格布局?与流型布局步骤一致1、创建网格布局对象构造方法GridLayout(intm,intn)GridLayout(intm,intn,inthgap,intvgap)比如:GridLayoutg1=newnewGridLayout(10,8);GridLayoutg2=newnewGridLayout(10,8,5,10);2、将布局应用到容器上声明创建网格对象GridLayoutg1=newGridLayout(3,2);将网格布局应用到容器上con.setLayout(g1);3、向网格布局容器中加组件1.4.6null空布局我们可以把一个容器的布局设置为null布局(空布局)。空布局容器可以准确地定位组件在容器的位置和大小。setBounds(inta,intb,intwidth,intheight)方法是所有组件都拥有的一个方法,组件调用该方法可以设置本身的大小和在容器中的位置。例如,p是某个容器:

p.setLayout(null);

把p的布局设置为空布局。向空布局的容器p添加一个组件c需要两个步骤,首先使用add(c)方法向容器添加组件,然后组件c再调用setBounds(inta,intb,intwidth,intheight)方法设置该组件在容器中的位置和本身的大小,组件都是一个矩形结构,方法中的参数a,b是被添加的组件c的左上角在容器中的位置坐标,即该组件距容器左面a个像素,距容器上方b个像素;weidth,height是组件c的宽和高。实验6日历布局设计日一二三四五六12345678910111213141516171819202122232425262728293031任务1:日历面板布局创建星期面板p12在面板p12上应用1×7的网格布局创建7个标签,并将其放入到p12中将星期面板p12放入列盒bv1中创建日历面板p13在p13上应用6×7的网格布局创建42个按钮,并将其放入面板p13中将日历面板p13放入列盒bv1中任务2:改变年月面板设计任务3:农历显示面板设计任务4:日志按钮面板设计1.5常用组件的使用标签JLabel文本框JTextField密码框JPasswordField文本区域JTextArea按钮JButton复选框JCheckBox单选按钮JRadioButton中间容器面板JPanel拆分窗格JSplitPane滚动窗格JScrollPane标签JLabelpublicJLabel()创建没有名字的标签。publicJLabel(Strings)创建名字是s的标签,s在标签中靠左对齐。publicJLabel(Strings,intaligment)参数aligment决定标签中的文字在标签中的水平对齐方式。publicJLabel(Iconicon)创建具有图标icon的标签,icon在标签中靠左对齐。publicJLabel(Strings,Iconicon,intaligment)创建名字是s,具有图标icon的标签,参数aligment决定标签中的文字和图标做为一个整体在标签中的水平对齐方式。StringgetText()获取标签的名字。voidsetText(Strings)设置标签的名字是s。IcongetIcon()获取标签的图标。voidsetIcon(Iconicon)设置标签的图标是iconvoidsetHorizontalTextPosition(inta)参数a确定名字相对于图标的位置,a的取值是:JLabel.LEFT,JLabel.RIGHT。voidsetVerticalTextPosition(inta)参数a确定名字相对于JLabel上的图标的位置,参数a取值是:JLabel.BOTTOM,JLabel.TOP。文本框JTextFieldJComponent的子类JTextField是专门用来建立文本框的,即JTextField创建的一个对象就是一个文本框。用户可以在文本框输入单行的文本。JTextField(intx)如果使用这个构造方法创建文本框对象,可以在文本框中输入若干个字符,文本框的可见字符个数由参数x指定。JTextField(Strings)如果使用这个构造方法创建文本框对象,则文本框的初始字符串为s,可以在文本框中输入若干个字符。publicvoidsetText(Strings)文本框对象调用该方法可以设置文本框中的文本为参数s指定的文本。publicStringgetText()文本框对象调用该方法可以获取文本框中的文本。publicvoidsetEditable(booleanb)文本框对象调用该方法可以指定文本框的可编辑性。创建的文本框默认为可编辑的。publicvoidsetHorizontalAlignment(intalignment)设文本在文本框中的对齐方式,其中alignment的有效值确定对齐方式。密码框JPasswordField使用JComponent的子类JPasswordField可以建立一个密码框对象。密码框可以使用setEchoChar(charc)设置回显字符(默认的回显字符是‘*’);使用char[]getPassword()方法返回密码框中的密码。文本区域JTextAreaJTextArea类专门用来建立文本区,用户可以在文本区输入多行的文本。JTextArea(introws,intcolumns)构造一个可见行和可见列分别是rows、columns的文本区。setLineWrap(booleanb)方法决定输入的文本能否在文本区的右边界自动换行setWrapStyleWord(booleanb)决定是以单词为界(b取true时)或以字符为界(b取false时)进行换行。getText()和setText(Strings)append(Strings)在文本区末尾追加字符串sinsert(Strings,intx)方法在文本区的指定位置处插入文本replaceRange(StringnewString,intstart,intend)将文本区start至end处的文本替换为新文本newStringgetCaretPosition()获取文本区中输入光标的位置setCaretPosition(intposition)设置文本区中输入光标的置(其中position不能大于文本区中字符的个数)另外,文本区还可以使用copy()和cut()方法将文本区中选中的内容拷贝或剪切到系统的剪贴板,使用paste()方法将系统剪贴板上的文本数据粘贴在文本区中,如果文本区中有选中的内容,paste()方法从剪贴板上取回的数据将替换选中的内容。按钮JButtonJButton(Stringtext)创建名字是text的按钮。publicJButton(Iconicon)创建带有图标icon的按钮。publicJButton(Stringtext,Iconicon)创建名字是text且带有图标icon的按钮publicvoidsetText(Stringtext)和publicStringgetText()

publicvoidsetHorizontalTextPosition(inttextPosition)设置按钮名字相对按钮上图标的水平位置,参数textPosition的有效值是:AbstractButton.LEFT、AbstractButton.CENTERT、AbstractButton.RIGHT。publicvoidsetVerticalTextPosition(inttextPosition)设置按钮上名字相对按钮上图标的垂直位置。publicvoidsetMnemonic(charmnemonic)按钮对象调用该方法可以设置按钮的键盘激活方式,mnemonic的有效值是:’a’~’z’。复选框JCheckBox复选框提供两种状态,一种是选中,另一种是未选中,用户通过单击该组件切换状态。publicJCheckBox()创建一个没有名字的复选框。publicJCheckBox(Stringtext)创建一个名字是text的复选框。publicJCheckBox(Iconicon)创建一个带有默认图标icon,但没有名字的复选框。publicJCheckBox(Stringtext,Iconicon)创建一个带有默认图标和名字text的复选框。publicvoidsetIcon(IcondefaultIcon)设置复选框上的默认图标。publicvoidsetSelectedIcon(IconselectedIcon)设置复选框选中状态下的图标publicbooleanisSelected()如果复选框处于选中状态该方法返回true,否则返回false。如果不对复选框进行初始化设置,默认的初始化设置均为为选中。复选框上的ItemEvent事件当复选框获得监视器之后,复选框从未选中状态变成选中状态或从选中状态变成未选中状态时就发生ItemEvent事件,ItemEvent类将自动创建一个事件对象。发生ItemEvent事件的事件源获得监视器的方法是addItemListener(ItemListenerlistener)。由于复选框可以发生ItemEvent事件,JCheckBox类提供了addItemListener方法。处理ItemEvent事件的接口是ItemListener,创建监视器的类必须实现ItemListener接口,该接口中只有一个的方法。当在复选框发生ItemEvent事件时,监视器将自动调用接口方法:publicvoiditemStateChanged(ItemEvente)对发生的事件作出处理。ItemEvent类中的方法getItemSelectable()返回Itemevent事件的事件源。单选按钮JRadioButton单选按钮和复选框很类似,所不同的是:在若干个复选框中我们可以同时选中多个,而一组单选按钮同一时刻只能有一个被选中。当创建了若干个单选按钮后,应使用ButtonGroup再创建一个对象,然后利用这个对象把这若干个单选按钮归组。归到同一组的单选按钮每一时刻只能选一。中间容器面板JPanel我们会经常使用JPanel创建一个面板,再向这个面板添加组件,然后把这个面板添加到底层容器或其他中间容器中。JPanel面板的默认布局是FlowLayout布局。JPanel()构造一个面板容器对象JPanelp1;p1=newJPanel();JPanelp2=newJPanel();拆分窗格JSplitPane拆分窗格就是被分成两部分的容器。拆分窗格有两种类型:水平拆分和垂直拆分。水平拆分窗口用一条拆分线把容器分成左右两部分,左面放一个组件,右面放一个组件,拆分线可以水平移动。垂直拆分窗格由一条拆分线分成上下两部分,上面放一个组件,下面放一个组件,拆分线可以垂直移动。JSplitPane(inta,Componentb,Componentc)构造一个拆分窗格,参数a取JSplitPane的静态常量HORIZONTAL_SPLIT或VERTICAL_SPLIT,以决定是水平还是垂直拆分。后两个参数决定要放置的组件。setDividerLocation(doubleposition)设置拆分线的位置。滚动窗格JScrollPane如果我们需要通过滚动条来观察一个组件,可以把一个组件放到一个滚动窗格中。JScorollPane(componentc)构造一个滚动窗格。例如:JTextArea不自带滚动条,因此我们就需要把文本区放到一个滚动窗格中。JTextAreatext1=newJTextArea(12,14);con.add(newJScorollPane(text1));分别设置水平和垂直滚动条自动出现scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);分别设置水平和垂直滚动条总是出现scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

分别设置水平和垂直滚动条总是隐藏scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);

实验7日历展示设计与实现任务1:声明并创建日历类对象mydate任务2:设置日历的年月日,并获取日历分布数组任务3:将日历数组保存的分布对应到按钮上。javax.swing.Border的使用见word文档实验8界面显示的优化任务1:将日历中周日列和周六列的字体颜色分别设置为红色和蓝色label.setForeGround(Color.red);任务2:将星期的字体设置为12号的隶书,并且加粗;并且将日历的字体设置为12号黑体。label.setFont(newFont(“隶书”,Font.BOLD,12))任务3:在上年、下年、上月和下月按钮设置快捷键;在保存和删除按钮上增加图标。

priYear.setMnemonic(‘P’);JButtonsava=newJButton(“保存”,newImageIcon(“save.gif”));任务4:将星期标签凸出显示Borderborder1=BorderFactory.createBevelBorder(BevelBorder.RAISED);xqLabel[i].setBorder(border1);任务5:将日历按钮凹下显示Borderborder2=BorderFactory.createBevelBorder(BevelBorder.LOWERED);rlButton[i].setBorder(border2);事件的处理主要内容ActionEvent行为事件FocusEvent焦点事件WindowEvent窗体事件MouseEvent鼠标事件KeyEvent键盘事件教学目标掌握事件处理机制掌握各种事件处理的方法及应用0、事件处理机制通知发生XXX事件事件源.addXXXListener(存放监视器引用的接口)接口方法(XXXe)

实现XXXListener接口的监视器接口回调图1事件处理事件源能够产生事件的对象都可以成为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。监视器我们需要一个对象对事件源进行监视,以便对发生的事件作出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。监视器就好比一个岗哨,只要事件源上发生了任何事情,都能够马上被岗哨发现。例如,对于一个事件源可以通过以下方法加载监视器:

add****Listener(ActioListenerlistener)

对于获取了监视器的事件源对象,在获得事件响应后,Java运行系统就自动用****Event类创建了一个对象,即发生了****Event事件。处理事件监视器负责调用特定的方法处理事件,也就是说创建监视器的类必须提供处理事件的特定方法,即实现接口方法。Java采用接口回调技术来处理事件,当事件源发生事件时,接口立刻通知监视器自动调用实现的某个接口方法,由接口方法规定了怎样处理事件的操作。接口回调这一过程对程序是不可见的,Java在设计组件事件时已经设置好了回调过程,程序只需让事件源获得正确的监视器即可自动完成事件处理。注意:为了能监视到这种类型的事件,事件源必须使用add****Listener方法获得监视器。1、ActionEvent为类引用ActionListener接口classCalendarFrameextendsJFrameimplementsActionListener{为事件源加载监视器

nextYear.addActionListener(this);重写事件处理方法publicvoidactionPerformed(ActionEvente){

if(e.getSource()==nextYear){//需要完成的处理事件}}JAVA的ActionEvent类的事件对象提供了如下方法去获得触发事件的事件源:

publicObjectgetSource()可以返回发生ActionEvent事件的对象的引用。实验9日历调整显示设计任务1:完成点击上年、下年将dateText文本框中数字加1或减1的功能;任务2:完成上月、下月将monthLabel标签中数字加1或者减1的功能;思考:如何限制年月不超过实际限制?任务3:当改变年月时,将日历分布也随之改变。任务4:完成dateText文本框的回车事件,完成日历改变2、FocusEvent为类引用FocusListener接口classCalendarFrameextendsJFrameimplementsActionListener,FocusListener{为事件源加载监视器

nextYear.addFocusListener(this);重写事件处理方法publicvoidfocusGained(FocusEvente){}publicvoidfocusLost(FocusEvente){}

JAVA的FocusEvent类的事件对象提供了如下方法去获得触发事件的事件源:

publicObjectgetSource()可以返回发生FocusEvent事件的对象的引用。实验10日历按钮点击事件处理任务1:当日历按钮获得焦点时,将该按钮背景设置为灰色Color.gray;任务2:当点击日历按钮时,将当前年月日显示在标签dateLabel中,如:2010年10月1日;任务3:当点击日历按钮时,在“农历及提示信息面板”中显示对应日期的农历信息。WindowEvent1、引用WindowListener接口JFrame类是Window类的子类,Window型对象都能触发WindowEvent事件。当一个JFrame窗口被激活、撤消激活、打开、关闭、图标化或撤消图标化时,就引发了窗口事件,即WindowEvent创建一个窗口事件对象。WindowEvent2、加载监视器addWindowlistener(Windowlistenerlistener)3、实现WindowListener接口中的所有抽象方法publicvoidwindowActivated(WindowEvente)当窗口从非激活状态到激活时调用该方法。publicvoidwindowDeactivated(WindowEvente)当窗口激活状态到非激活状态时调用该方法。publicvoidwindowClosing(WindowEvente)当窗口正在被关闭时调用该方法。publicvoidwindowClosed(WindowEvente)当窗口关闭时调用该方法。publicvoidwindowIconified(WindowEvente)当窗口图标化时调用该方法。publicvoidwindowDeiconified(WindowEvente)

当窗口撤消图标化时,窗口监视器调用。publicvoidwindowOpened(WindowEvente)

当窗口打开时,窗口的监视器调用该方法。WindowEvent创建的事件对象通过getWindow()方法可以获取发生窗口事件的窗口。WindowEvent事件处理方法2WindowAdapter适配器:接口中如果有多个方法会给使用者带来诸多不便,因为实现这个接口的类必须要实现接口中的全部方法,否则这个类必须是一个abstract类。为了给编程人员提供方便,Java提供的接口,如果其中的方法多于一个,Java同时就提供一个相关的称作适配器的类,这个适配器是已经实现了相应接口的类。举例:关闭窗体时退出应用程序MouseEvent1、引用接口Java分别使用两个接口来处理鼠标事件MouseListener接口与MouseMotionListener接口2、加载监视器addMouseListener(MouseListenerlistener)addMouseMotionListener(MouseListenerlistener)3、实现接口中的所有抽象方法mouseEntered(MouseEvente)

负责处理鼠标进入组件触发的鼠标事件。mouseExited(MouseEvente)

负责处理鼠标退出组件触发的鼠标事件。mousePressed(MouseEvent)

负责处理鼠标按下触发的鼠标事件。mouseReleased(MouseEvente)负责处理鼠标释放触发的鼠标事件。mouseClicked(MouseEvente)负责处理鼠标单击或连击触发的鼠标事件。MouseMotionListener的抽象方法mouseDragged(MouseEvente)在组件上拖动鼠标指针mouseMoved(MouseEvente)在组件上运动鼠标指针处理鼠标事件中常用的方法getX()

鼠标事件调用该方法返回触发当前鼠标事件时,鼠标指针在事件源坐标系中的x-坐标。getY()

鼠标事件调用该方法返回触发当前鼠标事件时,鼠标指针在事件源坐标系中的y-坐标。getClickCount()

鼠标事件调用该方法返回鼠标被连续单击的次数。getModifiers()鼠标事件调用该方法返回一个整数值,如果是通过鼠标左键触发的鼠标事件,该方法返回的值等于InputEvent类中的类常量BUTTON1_MASK;如果是右键返回的是InputEvent类中的类常量BUTTON3_MASK来表示。getSource()

鼠标事件调用该方法返回触发当前鼠标事件的事件源。

温馨提示

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

最新文档

评论

0/150

提交评论