2010-1-101《Java面向对象程序设计》第10章配合Java面向对象程序设计例子源代码一起使用Powerpoint制作:耿祥义张跃平JavaSwing图形用户界面2010-1-102主要内容•窗口•文本框、按纽、标签和文本区•布局•选择性组件•容器•表格和树•窗口事件、鼠标事件和键盘事件•使用MVC结构与中介者模式难点•使用MVC结构与中介者模式导读2010-1-103§10.1JavaSwing概述Java的java.awt包,即Java抽象窗口工具包(AWT:AbstractWindowToolkit)提供了许多用来设计GUI的组件类。2010-1-104§10.2窗口Java提供的JFrame类的实例是一个底层容器,即通常所称的窗口。其他组件必须被添加到底层容器中,以便借助这个地层容器和操作系统进行信息交互。JFrame类是Container类的间接子类。当需要一个窗口时,可使用JFrame或其子类创建一个对象。2010-1-105§10.2.1JFrame常用方法JFrame()创建一个无标题的窗口。JFrame(Strings)创建标题为s的窗口。publicvoidsetBounds(inta,intb,intwidth,intheight设置窗口的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。publicvoidsetSize(intwidth,intheight)设置窗口的大小。publicvoidsetLocation(intx,inty)设置窗口的位置,默认位置是(0,0)。publicvoidsetVisible(booleanb)设置窗口是否可见,窗口默认是不可见的。publicvoidsetResizable(booleanb)设置窗口是否可调整大小,默认可调整大小。publicvoiddispose()撤消当前窗口,并释放当前窗口所使用的资源。publicvoidsetExtendedState(intstate)设置窗口的扩展状态.publicvoidsetDefaultCloseOperation(intoperation)该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。例题10-12010-1-106§10.2.2菜单条、菜单、菜单项1.菜单条JComponent类的子类JMenubar负责创建菜单条,JFrame类有一个将菜单条放置到窗口中的方法:setJMenuBar(JMenuBarbar);该方法将菜单条添加到窗口的顶端2.菜单:JComponent类的子类JMenu负责创建菜单,JMenu类的主要方法有以下几种JMenu()建立一个空标题的菜单。JMenu(Strings)建立一个指定标题菜单,标题由参数s确定。publicvoidadd(JMenuItemitem)向菜单增加由参数item指定的菜单选项。publicJMenuItemgetItem(intn)得到指定索引处的菜单选项。publicintgetItemCount()得到菜单选项的数目。3.菜单项JComponent类的子类JMenuItem负责创建菜单项,JMenuItem类的主要方法有以下几种:JMenuItem(Strings)构造有标题的菜单项。JMenuItem(Stringtext,Iconicon)构造有标题和图标的菜单项publicvoidsetEnabled(booleanb)设置当前菜单项是否可被选择。publicStringgetText()得到菜单选项的名字。publicvoidsetText(Stringname)设置菜单选项的名字为参数name指定的字符串。publicvoidsetAccelerator(KeyStrokekeyStroke)为菜单项设置快捷键。4.嵌入子菜单JMenu是JMenuItem的子类,因此菜单本身也是一个菜单项,当把一个菜单看作菜单项添加到某个菜单中时,称这样的菜单为子菜单。5.菜单上的图标:图标类Icon声明一个图标,然后使用其子类ImageIcon类创建一个图标,如:Iconicon=newImageIcon(“a.gif”);例题10-22010-1-107§10.3文本框使用JComponent的子类JTextField创建文本框。文本框的特点是允许用户在文本框中输入单行文本。2010-1-108§10.3.1JTextField类的主要方法JTextField()创建文本框,文本框的长度为一个机器字符长。JTextField(intx)创建文本框,文本框的长度为x个机器字符长。TextField(Strings)创建文本框,文本框的初始字符串为s。publicvoidsetText(Strings)设置文本框中的文本为参数s指定的文本。publicStringgetText()获取文本框中的文本。publicvoidsetEditable(booleanb)指定文本框的可编辑性。文本框默认为可编辑的。setHorizontalAlignment(intalignment)设置文本框中文本的对齐方式,其中alignment的有效值是JTextField.LEFT、JTextField.CENTER、JTextField.RIGHT。publicvoidaddActionListener(ActionListener)向文本框增加动作监视器(将监视器注册到文本框)。publicvoidremoveActionListener(ActionListener)移去文本框上的动作监视器。例题10-32010-1-109§10.3.2文本框上的ActionEvent事件当用户在文本框中键入文本后按回车键、单击按钮、在一个下拉式列表表中选择一个条目等操作时,都发生界面事件。1.事件源:能够产生事件的对象都可以成为事件源.2.监视器:事件源通过调用相应的方法将某个对象注册为自己的监视器。对于文本框,这个方法是:addActionListener(监视器);3.处理事件的接口:Java规定:为了让监视器这个对象能对事件源发生的事件进行处理,创建该监视器对象的类必须声明实现相应的接口,那么当事件源发生事件时,监视器就自动调用被类重写的某个接口方法。java.awt.event包中提供了许多事件类和处理各种事件的接口。对于文本框,这个接口的名字是ActionListener,该接口中只有一个方法:publicvoidactionPerformed(ActinEvente)4.ActionEvent类中的方法:publicObjectgetSource()ActionEven对象调用该方法可以获取发生ActionEvent事件的事件源对象的引用。publicStringgetActionCommand()ActionEvent对象调用该方法可以获取发生ActionEvent事件时,和该事件相关的一个命令字符串。例题10-4,例题10-52010-1-1010§10.3.2文本框上的ActionEvent事件_续2010-1-1011§10.3.3内部类或匿名类实例做监视器当事件的处理比较简单,系统也不复杂时,使用内部类或匿名类做监视器是一个不错的选择.例题10-62010-1-1012§10.3.4窗口做监视器可以让文本框所在的当前窗口做为文本框的监视器。让事件源所在的类的实例作为监视器,能让事件的处理比较方便,这是因为,监视器可以方便的操作事件源所在的类中的其他成员,当事件的处理比较简单,系统也不复杂时,使用当前窗口做监视器是一个不错的选择。例题10-72010-1-1013§10.3.5事件处理总结1.授权模式Java的事件处理是基于授权模式,即事件源调用调用方法将某个对象注册为自己的监视器。2.接口回调Java语言使用接口回调技术实现处理事件的过程。addXXXListener(XXXListenerlistener);方法中的参数是一个接口3.方法绑定从方法绑定角度看,Java将某种事件的处理绑定到对应的接口。4.保持松藕合监视器和事件源应当保持是一种松藕合关系。2010-1-1014§10.3.6文本框上的文档类型1.JTextField的构造方法中,有一个如下的构造方法:JTextField(Documentdocument,Strings,intcolumns);该构造方法用指定的文档document创建一个文本框。2.其它构造方法创建的文本框的默认文档类型是PlainDocumnet的一个实例,默认文档类型允许在文本框里任意地输入、删除字符。PlainDocumnet类有如下两个重要的方法:insertString(intoffset,Strings,AttributeSeta);在位置offset处插入一个具有指定属性的字符串s。remove(intoffset,intlength);从位置offset处移去文本框中一段指定长度的内容。3.可以通过上述构造方法或JTextField的实例方法setDocutment(PlainDocumnetd)改变文本框的文档类型。可以扩展PlainDocumnet,重写父类PlainDocumnet中的方法,得到符合要求的子类。例题10-82010-1-1015§10.4密码框使用JComponent的子类JPasswordField创建密码框。文本框的密码框是允许用户在密码框中输入单行密码,密码框的默认回显字符是‘*’。密码框常用方法:setEchoChar(charc):重新设置回显字符。char[]getPassword():返回实际的密码。例题10-92010-1-1016§10.5按钮与标签§10.5.1按钮JComponent的子类JButton类用来创建按钮1.JButton类常用的方法Button(Stringname)创建名字是name的按钮。publicJButton(Iconicon)创建带有图标icon的按钮。publicJButton(Stringname,Iconicon)创建名字是name且带有图标icon的按钮publicvoidsetText(Stringname)重新设置按钮的名字。publicStringgetText()获取按钮上的名字。publicvoidsetIcon(Iconicon)重新设置按钮上的图标。publicIcongetIcon()获取按钮上的图标。publicvoidsetHorizontalTextPosition(inttextPosition)设置按钮名字相对按钮上图标的水平位置。publicvoidsetVerticalTextPosition(inttextPosition)设置按钮上名字相对按钮上图标的垂直位置。publicvoidsetMnemonic(charmnemonic)设置按钮的键盘激活方式,mnemonic的有效值是:’a’~’z’。publicvoidaddActionListener(ActionListener)按钮对象调用该方法可以向按钮注册ActionEvent事件监视器。2010-1-1017§10.5.1按钮_续2.触发ActionEvent事件按钮可以触发ActionEvent事件。例题10-102010-1-1018§10.5.2标签JComponent的子类JLabel创建的对象称做标签。JLabel类的常用方法如下publicJLabel()创建没有名字的标签。publicJLabel(Strings)创建名字是s的标签,s在标签中靠左对齐。publicJLabel(Strings,intaligment)参数aligment决定标签中的文字在标签中的水平对齐方式。publicJLabel(Iconicon)创建具有图标icon的标签,icon在标签中靠左对齐。StringgetText()获取标签的名字。voi