java的用户界面PPT演示课件_第1页
java的用户界面PPT演示课件_第2页
java的用户界面PPT演示课件_第3页
java的用户界面PPT演示课件_第4页
java的用户界面PPT演示课件_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

第9章Java图形用户界面,1,第9章Java图形用户界面,教学提示:在Java的图形化程序设计中,需要有大量的组件来支持。Component是许多组件类的父类,它封装了组件通用的方法和属性,如组件大小、显示位置、前景色和背景色、边界、可见性等。容器(Container)也是一个类,它是Component的子类,它的主要功能是容纳其他组件和容器,而每个容器都有一个默认布局管理器。本章主要介绍:Java中常用的非容器组件类、容器组件类以及用于管理容器布局的布局管理器等,它们是进行图形化设计的基础,从类对象的创建、类的属性、事件类型等方面来综合掌握这些类的应用。本章通过介绍常用类的使用方法,使读者能够进行窗体的设计,并运用事件处理机制来处理事件。,2,第9章Java图形用户界面,9.1容器与基本控件9.2布局管理器9.3Java中键盘事件和鼠标事件9.4彩色列表框实例9.5课后练习,3,9.1容器与基本控件,9.1.1窗口9.1.2面板和画布9.1.3菜单9.1.4按钮9.1.5文本框和文本域9.1.6标签,4,9.1容器与基本控件,本节将重点介绍Java的窗口编程中几个常用的控件,熟悉和掌握它们将有利于很好地进行Windows程序开发。,5,9.1.1窗口,1.Frame的创建Frame类提供了两个构造方法来分别创建不带标题和带标题的Frame窗口。publicFrame():创建一个不可见的无标题Frame窗口。publicFrame(Stringtitle):创建一个不可见的指定标题的Frame窗口。,6,9.1.1窗口,2.Frame的常用方法由于Component、Container、Window和Frame依序存在父子类关系,除了可以继承其父类的非私有方法外,Frame类又提供了相应的方法来改变Frame窗口的属性,如表9-1所示。,7,9.1.1窗口,表9-1Frame类中常用的方法,8,9.1.1窗口,3.Frame与窗口事件Frame是一个带有标题和缩放角的窗口,有自己的外边框和标题,创建Frame时可以指定其窗口标题。每个Frame在其右上角都有3个控制图标,分别代表将窗口最大化、最小化和关闭的操作,其中,最大化和最小化操作Frame可自动完成,而关闭窗口的操作不能通过单击关闭图标实现,必须通过事件响应来关闭窗口,在前面含有窗口的示例中,都不能通过关闭按钮来退出程序,只能使用Ctrl+Alt+Del键来强行退出。,9,9.1.1窗口,窗口事件是由于窗口收到窗口级事件而产生的,该事件对应的接口名称是WindowListener,该接口的定义如下:publicinterfaceWindowListenerextendsEventListenerpublicvoidwindowClosing(WindowEvente);/退出窗口的语句写在本方法中publicvoidwindowOpened(WindowEvente);/窗口打开时调用publicvoidwindowIconified(WindowEvente);/窗口图标化时调用publicvoidwindowDeiconified(WindowEvente);/窗口非图标化时调用publicvoidwindowClosed(WindowEvente);/窗口关闭时调用publicvoidwindowActivated(WindowEvente);/窗口激活时调用publicvoidwindowDeactivated(WindowEvente);/窗口非激活时调用,10,9.1.1窗口,【例9.1】MyFrame类可以实现两种退出运行程序、关闭窗口的方法。一种是通过用户设置的Exit按钮,另一种是使用窗口关闭按钮。其中CloseFrame是用来关闭窗口的类。程序如下。importjava.awt.*;importjava.awt.event.*;publicclassMyFrameimplementsActionListenerpublicstaticvoidmain(Stringargs)Framef=newFrame(Hello!);Buttonbutton=newButton(exit);f.setLayout(newFlowLayout();f.add(button);button.addActionListener(newMyFrame();/注册ActionListener监听器f.setBounds(0,0,260,120);f.addWindowListener(newCloseFrame();/注册WindowListener监听器f.setVisible(true);/重写ActionListener接口中的actionPerformed()方法,11,9.1.1窗口,publicvoidactionPerformed(ActionEvente)if(e.getActionCommand()=exit)System.exit(1);/定义处理窗口事件的类CloseFrame,实现WindowListener接口classCloseFrameimplementsWindowListenerpublicvoidwindowClosing(WindowEvente)System.exit(1);/退出系统publicvoidwindowActivated(WindowEvente)publicvoidwindowDeactivated(WindowEvente)publicvoidwindowClosed(WindowEvente)publicvoidwindowOpened(WindowEvente)publicvoidwindowIconified(WindowEvente)publicvoidwindowDeiconified(WindowEvente)该程序的运行结果如图9-1所示。,12,9.1.1窗口,图9-1运行结果(例9.1),13,9.1.2面板和画布,1.面板和画布的创建Panel类提供了两个构造方法来创建面板对象。publicPanel():创建一个默认布局管理器的面板对象。publicPanel(LayoutManagerlayout):创建一个指定布局管理器的面板对象。面板对象创建之后,就可以运用容器对象的add()方法将该面板加入其他的容器中。当然也可以嵌套面板,即一个面板包含一个或多个其他的面板,例如:Panelpanel1=newPanel();Panelpanel2=newPanel();Panelpanel3=newPanel();panel1.Add(panel2);/把panel2和panel3加入panel1中panel1.Add(panel3);add(panel1);/加入当前小应用程序中,14,9.1.2面板和画布,画布组件可以通过下面的构造方法创建:publicCanvas()当程序运行后,将出现一块矩形区域的画布,Canvas组件默认尺寸为00,所以必须保证至少在画布中实现自己的尺寸方法。,15,9.1.2面板和画布,2.面板和画布的使用Canvas组件的常用方法为publicvoidpaint(Graphicsg),画布是一种通用组件,它本身不具有任何功能,也不处理任何事件,在用户使用画布时应该在程序中派生它的子类,并覆盖Canvas类的paint()方法,就可以在画布上面绘制有关的图形。Canvas组件监听各种鼠标、键盘事件。当在Canvas组件中输入字符时,必须先调用requestFocus()方法。画布和面板都可以“监听”所有适用于一个普通组件的事件,当然也可以引发键盘和鼠标事件,以允许以某种方式对用户输入作出反应。,16,9.1.2面板和画布,【例9.3】创建两个面板,每个面板含有两个组件,程序文件名MyPanel.java。程序如下。importjava.awt.*;classMyPanelpublicstaticvoidmain(Stringargs)Framef=newFrame(Hello!);Panelpanel1=newPanel();/定义并创建面板对象panel1Panelpanel2=newPanel();/定义并创建面板对象panel2Checkboxcheck1=newCheckbox(BOLD);Checkboxcheck2=newCheckbox(ITALIC);CheckboxGroupgroup=newCheckboxGroup();/定义并创建复选按钮组Checkboxcheck3=newCheckbox(red,group,false);Checkboxcheck4=newCheckbox(blue,group,false);/把复选按钮check1和check2添加到面板容器panel1panel1.add(check1);panel1.add(check2);/把复选按钮check3和check4添加到面板容器panel2panel2.add(check3);panel2.add(check4);f.setLayout(newFlowLayout();/把面板panel1和panel2添加到窗体中,17,9.1.2面板和画布,f.add(panel1);f.add(panel2);f.setBounds(0,0,280,150);f.setVisible(true);运行效果如图9-2所示。图9-2运行结果(例9.3),18,9.1.2面板和画布,【例9.4】画布的实现和应用,程序文件名CanvasApp.java。程序如下。importjava.awt.*;importjava.awt.event.*;classCanvasApppublicstaticvoidmain(Stringargs)Framef=newFrame(Hello!);/创建MyCanvas对象,并初始化画图颜色为红色MyCanvascv=newMyCanvas(Color.red);cv.setSize(100,100);/设置画布的大小f.setSize(200,200);f.add(cv);f.setLayout(newFlowLayout();f.setVisible(true);/定义画布MyCanvas类classMyCanvasextendsCanvasColormyColor;/定义画图的颜色对象/构造方法,初始化画图颜色publicMyCanvas(ColordrawColor),19,9.1.2面板和画布,myColor=drawColor;publicvoidpaint(Graphicsg)intdiameter,xPoint,yPoint;/定义圆的直径和圆的左上角坐标变量DimensioncurrentSize=getSize();/获取当前画布的尺寸/圆的直径取当前画布尺寸中的小值if(currentSize.widthcurrentSize.height)diameter=currentSize.height;elsediameter=currentSize.width;g.setColor(myColor);/设置绘图的颜色xPoint=(currentSize.width-diameter)/2;/左上角x坐标yPoint=(currentSize.height-diameter)/2;/左上角y坐标g.fillOval(xPoint,yPoint,diameter,diameter);/填充一个圆该程序的运行结果如图9-3所示。,20,9.1.2面板和画布,图9-3运行结果(例9.4),21,9.1.3菜单,1.菜单条(MenuBar)菜单条是一种水平菜单,它只能被添加到Frame对象中,作为整个菜单树的根基。其主要功能是被用来放置Menu组件。创建菜单条的构造方法为:publicMenuBar()把菜单条添加到指定的窗口中,常常使用窗口类的setMenuBar()方法来实现。下面的程序可以把一个菜单条mb添加到窗口fr中。Framefr=newFrame(MenuBar);MenuBarmb=newMenuBar();/创建菜单条对象fr.setMenuBar(mb);/设置窗体的菜单条为mbfr.setSize(150,100);fr.setVisible(true);菜单条不支持监听器,因为在其中所发生的各类事件将由菜单项处理。,22,9.1.3菜单,2.菜单(Menu)Menu类的主要功能是被用来放置MenuItem、MenuShortCut等组件,它可以被添加到MenuBar中或其他Menu中。常用菜单条的add()方法把菜单对象添加到菜单条中。下面的程序段实现了在窗体中添加一个菜单条,并在菜单条中加入3个菜单的示例效果。Framefr=newFrame(MenuBar);MenuBarmb=newMenuBar();fr.setMenuBar(mb);/创建3个菜单对象m1,m2,m3Menum1=newMenu(File);Menum2=newMenu(Edit);Menum3=newMenu(Help);mb.add(m1);/把菜单添加到菜单条中mb.add(m2);,23,9.1.3菜单,图9-4菜单条的运行结果,24,9.1.3菜单,3.菜单项(MenuItem)菜单项是菜单树中的“文本叶子”,菜单项通常被添加到一个菜单中。对于MenuItem对象可以添加ActionListener,使其能够完成相应的操作。创建菜单项对象常用的构造方法有以下几个。publicMenuItem():创建一个没有标签和键盘快捷键的菜单项。publicMenuItem(Stringlabel):创建一个有标签而没有键盘快捷键的菜单项。publicMenuItem(Stringlabel,MenuShortcuts):创建一个有标签和键盘快捷键的菜单项。MenuItem类也提供了deleteShortcut()、getLabel()、isEnabled()、setEnabled()、setLabel()和setShortcut()等方法实现对菜单项的设置。,25,9.1.3菜单,对上面的程序段进行菜单项的补充,就可以创建一个带有菜单项的示例效果。Menum1=newMenu(File);MenuItemmi1=newMenuItem(Save);MenuItemmi2=newMenuItem(Load);MenuItemmi3=newMenuItem(Quit);m1.add(mi1);m1.add(mi2);m1.add(mi3);运行效果如图9-5所示。,26,9.1.3菜单,图9-5添加菜单项,27,9.1.3菜单,4.分隔条的设置除菜单项以外,用户还可以在菜单中添加子菜单和菜单分隔符,分隔符是出现在菜单中的一条线,用于将菜单分成多个部分。可以调用addSeparator()方法来添加分隔符。在上面的程序代码段中再增加m1.addSeparator()语句后的运行效果如图9-6所示。图9-6加分隔线,28,9.1.3菜单,5.子菜单的创建要想创建子菜单,只需要创建一个新的菜单实例并把它加到当前的菜单中即可。【例9.5】二级菜单设计举例。程序如下。MenuBarmb=newMenuBar();/创建菜单条/创建3个菜单对象Menum1=newMenu(File);Menum2=newMenu(Edit);Menum3=newMenu(Help);/创建一个作为子菜单的菜单对象Menusub=newMenu(submenu);/向该子菜单中添加两个菜单项sub.add(newMenuItem(subitem1);sub.add(newMenuItem(subitem);/创建3个菜单项MenuItemmi1=newMenuItem(Save);MenuItemmi2=newMenuItem(Load);MenuItemmi3=newMenuItem(Quit);/给菜单条添加3个菜单mb.add(m1);mb.add(m2);,29,9.1.3菜单,mb.setHelpMenu(m3);/给m1菜单对象添加菜单项、分割符和二级子菜单subm1.add(mi1);m1.add(mi2);m1.addSeparator();m1.add(sub);m1.add(mi3);运行效果如图9-7所示。图9-7添加子菜单(例9.5),30,9.1.3菜单,6.使用菜单子项快捷键在用构造方法MenuItem(Stringlabel,MenuShortcuts)创建MenuItem对象时,可以为其设置一个对应的快捷键,MenuShortcut类提供了两个构造方法用来创建快捷键。(1)publicMenuShortcut(intkey):以指定的键符创建功能选项快捷键。(2)MenuShortcut(intkey,booleanuseShiftModifier):以指定的键符创建功能选项快捷键并可指定是否使用Shift键。,31,9.1.3菜单,【例9.6】菜单设计举例,程序如下。importjava.awt.*;importjava.awt.event.*;classMyMenuimplementsActionListenerpublicstaticvoidmain(Stringargs)Framefr=newFrame(MenuBar);MenuBarmb=newMenuBar();fr.setMenuBar(mb);Menum1=newMenu(File);Menum2=newMenu(Edit);Menum3=newMenu(Help);/设置菜单项的快捷键MenuItemmi1=newMenuItem(Save,newMenuShortcut(KeyEvent.VK_S);MenuItemmi2=newMenuItem(Load,newMenuShortcut(KeyEvent.VK_O);MenuItemmi3=newMenuItem(Quit,newMenuShortcut(KeyEvent.VK_X);,32,9.1.3菜单,mb.add(m1);mb.add(m2);mb.setHelpMenu(m3);m1.add(mi1);m1.add(mi2);m1.addSeparator();m1.add(mi3);mi3.addActionListener(newMyMenu();/对Quit菜单项注册动作事件监听器fr.addWindowListener(newCloseFrame();/对窗体注册窗体事件监听器fr.setSize(150,150);fr.setVisible(true);,33,9.1.3菜单,publicvoidactionPerformed(ActionEvente)if(e.getActionCommand()=Quit)System.exit(1);效果如图9-8所示。图9-8给菜单加快捷键(例9.6),34,9.1.4按钮,1.按钮的创建按钮Button类提供了两个构造方法来创建按钮对象,所以在创建按钮时用户只需要决定是否给按钮填写标签即可。(1)publicButton():创建一个没有标签的按钮对象。(2)publicButton(Stringlabel):创建一个有标签的按钮对象。,35,9.1.4按钮,当一个按钮创建后,需要把按钮加进容器中,如:ButtonmyButton=newButton(OK);add(myButton);Button类除了可以使用继承于父类的方法外,对其属性进行操作的方法主要还有两个。(1)publicStringgetLabel():返回按钮的标签文本。(2)publicvoidsetLabel(Stringlabel):重新设置按钮的标签文本。,36,9.1.4按钮,2.按钮的事件响应Java采用将事件源和监听器分开的委托事件模型来处理事件,不同的事件由不同的监听器处理。图形用户界面中每个可能产生事件的组件都被称为“事件源”,如文本框、按钮、菜单等,实现事件响应的对象称为“监听者”,监听者可以是任何类,但它必须实现与事件类型相对应的监听接口,并被事件源注册,这样监听器才能时刻监听事件源上发生的相关事件,一旦该事件类型与自己所负责处理的事件类型一致,就马上进行处理。当一个按钮对象被单击后,该按钮对象就是事件源,将引发ActionEvent事件,对该事件的处理可以结合事件处理模型来进行。,37,9.1.4按钮,对于ActionEvent事件类型,它所对应的监听接口是ActionListener,我们必须定义相应的事件监听器类来实现ActionListener接口;在实现ActionListener接口的监听器类中要重写actionPerformed()方法,把事件发生后要完成的功能在该方法中实现;事件源对象通过addActionListener(监听器类对象)来注册监听器,完成授权处理。当有多个按钮被监听器监听时,为了可以使用ActionEvent类中的getActionCommand()方法区分当前事件产生的事件源,该方法返回所单击按钮上的标签字符串,而按钮上的标签用户是已知的,通过equals()方法进行字符串恒等比较,就可以确定哪个按钮被单击了。,38,9.1.4按钮,3.复选按钮的创建复选按钮Checkbox组件可以提供简单的“on/off”开关,同时在旁边还可以显示一个文本标签。创建复选按钮对象的构造方法有以下几个。(1)publicCheckbox():创建不带标签的复选按钮。(2)publicCheckbox(Stringlabel):创建带标签的复选按钮。(3)publicCheckbox(Stringlabel,booleanstate):创建带标签且指定选择状态的复选按钮。,39,9.1.4按钮,在创建带标签的复选按钮对象时,标签文本要能够体现复选按钮的意义和作用。Checkbox类直接派生于Component类,在对复选按钮对象操作时,常用的方法有以下几个。(1)publicStringgetLabel():获取复选按钮的标签。(2)publicvoidsetLabel(Stringlabel):重置复选按钮的标签。(3)publicbooleangetState():获取复选按钮的选择状态。(4)publicvoidsetState(booleanstate):重置复选按钮的选择状态。,40,9.1.4按钮,4.复选按钮的事件响应复选按钮被单击后,如果原来选中则变为未选中,反之亦然,同样,如果不给复选按钮对象注册监听器,外观虽然发生变化,但是不会执行用户所指定的功能。复选按钮类响应的主要事件是项目事件,即ItemEvent事件,单击复选按钮就会触发ItemEvent事件,ItemEvent事件类所对应的监听接口是ItemListener,在该接口中只有一个方法itemStateChanged(ItemEvente)。,41,9.1.4按钮,5.单选按钮的常用方法单选按钮是复选框的特例,没有单独的单选按钮类存在。用户可以通过把一组复选按钮放置在同一个复选按钮组中而创建一套单选按钮组。CheckboxGroup类提供了一个构造方法来创建复选按钮组:publicCheckboxGroup()CheckboxGroup类提供的用来管理复选按钮组的常用方法如下。publicCheckboxgetSelectedCheckbox():得到当前选中的复选按钮。publicvoidsetSelectedCheckbox(Checkboxbox):设置被选中的复选按钮对象。创建单选按钮的方法如下。publicCheckbox(Stringlabel,booleanstate,CheckboxGroupgroup)publicCheckbox(Stringlabel,CheckboxGroupgroup,booleanstate),42,9.1.4按钮,6.单选按钮的事件响应单选按钮的事件响应与复选按钮相同,单击单选按钮时,相应的项目事件将被调用。在事件处理方法itemStateChanged(ItemEvente)中,利用ItemEvent类的getSource()方法返回所选择的单选按钮的对象名,也可利用ItemEvent类的getItem()方法返回所选择的单选按钮的标签值来确定事件源对象。用Checkbox类的getState()方法来判断当前事件源对象的选中状态,也可用ItemEvent类的getStateChange()方法判断事件源的选中状态。,43,9.1.4按钮,【例9.8】单、复选按钮的实现举例,程序如下。importjava.awt.*;importjava.awt.event.*;classMyCheckimplementsItemListener/实现ItemListenerstaticTextFieldtext1;/定义静态文本框对象text1staticCheckboxcheck1;/定义静态复选按钮对象check1staticCheckboxcheck2;/定义静态复选按钮对象check2staticCheckboxcheck3;/定义静态复选按钮对象check3publicstaticvoidmain(Stringargs)Framef=newFrame(Hello!);text1=newTextField(Pleasecontrolme!,20);check1=newCheckbox(BOLD);/创建复选按钮对象check1CheckboxGroupgroup=newCheckboxGroup();/创建复选按钮组对象group/创建复选按钮对象check2和check3并加入复选按钮组group中,/初始时按钮的状态为未选中check2=newCheckbox(red,group,false);check3=newCheckbox(blue,group,false);f.setLayout(newFlowLayout();,44,9.1.4按钮,f.add(text1);f.add(check1);f.add(check2);f.add(check3);/对复选按钮添加监听器check1.addItemListener(newMyCheck();check2.addItemListener(newMyCheck();check3.addItemListener(newMyCheck();text1.setFont(newFont(宋体,Font.PLAIN,15);/文本框对象text1的字体f.setBounds(0,0,200,100);f.setVisible(true);/重写ItemListener接口中的itemStateChanged()方法publicvoiditemStateChanged(ItemEvente)/用复选按钮控制文本框text1的字体为粗或者常规if(e.getSource()=check1)if(e.getStateChange()=1)text1.setFont(newFont(宋体,Font.BOLD,15);else,45,9.1.4按钮,text1.setFont(newFont(宋体,Font.PLAIN,15);/用单选按钮控制文本框text1的字体颜色为红色或是蓝色if(e.getSource()=check2)text1.setForeground(Color.red);if(e.getSource()=check3)text1.setForeground(Color.blue);程序运行结果如图9-10所示。图9-10运行结果(例9.8),46,9.1.5文本框和文本域,1.文本框和文本区的创建TextField类提供了多种构造方法,用于创建文本框组件的对象。常见的构造方法的使用如下。publicTextField():创建一个空的文本框对象。publicTextField(intcolumns):创建一个能容纳columns个字符的空文本框对象。publicTextField(Stringtext):创建一个初始化文本为text的文本框对象。publicTextField(Stringtext,intcolumns):创建一个长度为columns且初始化文本为text的文本框对象。,47,9.1.5文本框和文本域,创建TextArea的方法与创建TextField的方法相似,除了在指定文本区大小时既要给出文本区的列数又要给出文本区的行数以外,它们是完全相同的。publicTextArea():创建一个空文本区对象。publicTextArea(introws,intcolumns):创建一个能容纳rows行columns列的空文本区对象。publicTextArea(Stringtext):创建一个具有给定字符串text的文本区对象。publicTextArea(Stringtext,introws,intcolumns):创建一个具有给定字符串text,且指定rows行columns列的空文本区对象。,48,9.1.5文本框和文本域,2.文本框和文本区的常用方法由于TextField类和TextArea类都继承于类TextComponent,TextComponent类实现的许多有用的方法都可以在TextField和TextArea这两个类中使用。TextComponent类中的常用方法见表9-2。TextField和TextArea类中常用的方法分别见表9-3和表9-4。,49,9.1.5文本框和文本域,表9-2TextComponent类中常用的方法,50,9.1.5文本框和文本域,表9-3TextField类中常用的方法,51,9.1.5文本框和文本域,表9-4TextArea类中常用的方法,52,9.1.5文本框和文本域,3.文本框和文本区的事件响应文本框除了继承它们父类的事件类型,如TextEvent、KeyEvent、MouseEvent等外,还可以产生一个ActionEvent事件,当向文本框中键入信息并按下Enter键后,就会发生该事件。为了响应ActionEvent事件,必须实现与ActionEvent事件类型相应的监听器接口ActionListener,并为文本框注册监听器,然后通过对ActionListener接口中actionPerformed()方法的实现来完成对事件的相应处理。,53,9.1.5文本框和文本域,【例9.9】本例创建一个文本框和一个文本区,当文本框中发生ActionEvent事件时,就把非空的文本框内容换行追加到文本区中,然后清空文本框。程序如下。importjava.awt.*;importjava.awt.event.*;classMyTextimplementsActionListenerstaticTextFieldtext1;/定义文本框对象staticTextAreatext2;/定义文本区对象publicstaticvoidmain(Stringargs)Framef=newFrame();/创建窗体对象text1=newTextField(,20);/创建文本框对象text2=newTextArea(,4,30);/创建文本区对象f.add(text1);,54,9.1.5文本框和文本域,f.add(text2);text1.addActionListener(newMyText();/注册监听器f.setLayout(newFlowLayout();/设置布局管理器为FlowLayout管理器对象f.setBounds(0,0,300,150);/设置窗体大小f.setVisible(true);/设置可见性/重写ActionListener接口中的actionPerformed()方法publicvoidactionPerformed(ActionEvente)/文本框中有信息时把信息追加到文本区中if(!(text1.getText().equals(),55,9.1.5文本框和文本域,text2.append(text1.getText();text2.append(n);text1.setText();程序运行结果如图9-11所示。图9-11运行结果(例9.9),56,9.1.6标签,标签Label类提供了3种构造方法来创建标签对象。publicLabel():创建一个空标签对象,不显示任何文本内容。publicLabel(Stringtext):创建一个显示文本值为text的标签。publicLabel(Stringtext,intalignment):创建一个显示文本值为text的标签,并指定它的对齐方式。Label类有3个对齐属性:左对齐Label.LEFT、居中对齐Label.CENTER和右对齐Label.RIGHT,它们分别对应0、1和2整型数据。,57,9.1.6标签,下列程序段表现了标签的不同对齐方式:/设置当前容器的布局管理器setLayout(newFlowLayout(FlowLayout.CENTER,10,10);add(newLabel(LEFT!,Label.LEFT);/左对齐add(newLabel(CENTER!,Label.CENTER);/居中add(newLabel(LEFT!,Label.RIGHT);/右对齐显示效果如图9-12所示。图9-12运行结果,58,9.1.6标签,Label类提供了3个实用的方法来改变标签对象的属性。publicStringgetText():返回标签对象的文本值。publicvoidsetAlignment(intalignment):重置标签对象的对齐方式。publicvoidsetText(Stringtext):重置标签对象的文本值。下面的程序段将修改标签中的文本内容。if(label1.getText()=Yes)label1.setText(ok);elseif(label1.getText()=No)label1.setText(Yes);,59,9.2布局管理器,9.2.1FlowLayout布局管理器9.2.2GridLayout布局管理器9.2.3BorderLayout布局管理器9.2.4CardLayout布局管理器9.2.5控件的排布示例,60,9.2布局管理器,为了实现跨平台的特性并且获得动态的布局效果,将容器内的所有组件授权给容器的布局管理器来管理,包括排列顺序,组件的大小、位置,当窗口移动或调整大小后组件如何变化等功能。不同的布局管理器使用不同的算法和策略,容器可以通过选择不同的布局管理器来决定布局。每个实现接口LayoutManager的类都可以作为布局管理器,JavaAWT提供了FlowLayout、BorderLayout、CardLayout等布局管理器。在使用布局管理器进行容器的布局设计时,通常只需在容器中设置合适的布局管理器即可,容器和对应的布局管理器会自动进行交互而不需要程序的干预。设置容器的布局管理器由容器的setLayout()方法完成。,61,9.2.1FlowLayout布局管理器,FlowLayout是Panel、Applet的默认布局管理器。其组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。,62,9.2.1FlowLayout布局管理器,FlowLayout提供的构造方法主要有以下几个。publicFlowLayout():创建居中对齐、水平和垂直间距为5个像素的FlowLayout对象。publicFlowLayout(intalign):以指定的对齐方式创建水平和垂直间距为5个像素的FlowLayout对象。publicFlowLayout(intalign,inthgap,intvgap):以指定的对齐方式、水平和垂直间距创建FlowLayout对象。FlowLayout布局中的对齐方式有3种:FlowLayout.LEF(左对齐)、FlowLayout.RIGHT(右对齐)、FlowLayout.CENTER(中央对齐)。,63,9.2.1FlowLayout布局管理器,【例9.10】本例利用MyFlowLayout类演示了对3个按钮的简单管理效果,程序如下。importjava.awt.*;classMyFlowLayoutpublicstaticvoidmain(Stringargs)Framef=newFrame();f.setLayout(newFlowLayout();/设置窗体容器的布局管理器为流式管理器Buttonbutton1=newButton(First);Buttonbutton2=newButton(Second);Buttonbutton3=newButton(Third);f.add(button1);f.add(button2);f.add(button3);,64,9.2.1FlowLayout布局管理器,f.addWindowListener(newCloseFrame();/CloseFrame类参见例9.1f.setSize(300,100);f.setVisible(true);运行效果如图9-13所示。图9-13运行结果(例9.10),65,9.2.2GridLayout布局管理器,GridLayout是一种网格状的布局,各个组件平均占据容器的空间,在生成GridLayout布局管理器对象时,需指明行数和列数,同时也可以指明各个组件之间的间距。当改变容器的大小时,其中的组件相对位置不变而大小改变,各个组件的排列方式为:从上到下、从左到右依次排列。创建网格布局管理器对象常用下面两种构造方法来实现。publicGridLayout(introws,intcols):以指定的行列数创建GridLayout对象。publicGridLayout(introws,intcols,inthgap,intvgap):以指定的行列数与水平间距创建GridLayout对象。,66,9.2.2GridLayout布局管理器,【例9.11】GridLayout布局管理器的简单应用举例,程序如下。importjava.awt.*;publicclassMyGridLayoutpublicstaticvoidmain(Stringargs)Framef=newFrame(GridLayout);f.setLayout(newGridLayout(3,2);f.add(newButton(1);/第一行第一列f.add(newButton(2);/第一行第二列f.add(newButton(3);/第二行第一列f.add(newButton(4);/第二行第二列f.add(newButton(5);/第三行第一列f.add(newButton(6);/第三行第二列f.addWindowListener(newCloseFrame();/CloseFrame类参见例9.1f.setSize(200,200);f.setVisible(true);,67,9.2.2GridLayout布局管理器,运行结果如图9-14所示。图9-14运行结果(例9.11),68,9.2.3BorderLayout布局管理器,BorderLayout是Window、Frame和Dialog的默认布局管理器。BorderLayout布局管理器把容器分成5个区域:North、South、East、West和Center,每个区域只能放置一个组件。BorderLayout提供的构造方法主要有两个。publicBorderLayout():创建水平和垂直间距都为零的BorderLayout对象。publicBorderLayout(inthgap,intvgap):以指定的水平和垂直间距来创建BorderLayout对象。【例9.12】本例利用MyBorderLayout类演示水平和垂直间距都为零时的布局管理效果,程序如下。importjava.awt.*;classMyBorderLayoutpublicstaticvoidmain(Stringargs)Framef=newFrame(BorderLayout);f.setLayout(newBorderLayout();/设置窗体容器的布局管理器,69,9.2.3BorderLayout布局管理器,/在不同方位加入不同的按钮f.add(North,newButton(北);f.add(South,newButton(南);f.add(East,newButton(东);f.add(West,newButton(西);f.add(Center,newButton(中间);f.addWindowListener(newCloseFrame();f.setSize(200,200);f.setVisible(true);运行结果如图9-15所示。图9-15运行结果(例9.12),70,9.2.4CardLayout布局管理器,CardLayout布局管理器把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面,形成同一显示空间上的多层显示的效果。可以想像共享成员之间就像扑克牌一样摞在一起,只有最上面的成员是可见的,CardLayout处理这些成员时就像在换牌:可以定义每张牌的名字,通过牌的名字来选择;也可以顺着牌序向前或向后翻牌;或者直接选择第一张或者最后一张。,71,9.2.4CardLayout布局管理器,CardLayout提供了两个构造方法来创建CardLayout布局管理器对象。publicCardLay

温馨提示

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

评论

0/150

提交评论