第六章-图形用户界面_第1页
第六章-图形用户界面_第2页
第六章-图形用户界面_第3页
第六章-图形用户界面_第4页
第六章-图形用户界面_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

第六章图形用户界面一、图形用户界面概述二、Swing常用组件三、事件处理四、布局设计与边界五、菜单设计六、对话框设计七、文字与图形处理一、图形用户界面概述Java语言提供了大量支持GUI设计的类,如按钮、菜单、列表、特性框、对话框等组件类,同时也提供了包含窗口、面板等容器类。Java的抽象工具集AWT和Swing中包含了很多类以支持GUI的设计。设计和实现图形用户界面的主要任务包括下面两个层次:(1)创建组成界面的各成分和元素,指定它们的属性和位置关系,根据具体需要布局排列,以构成图形用户界面的外观表现。(2)定义图形用户界面的事件和各界面元素所对不同事件的响应,以实现图形用户界面与用户间的交互功能。一、图形用户界面概述基本概念

1.组件组件是Java图形用户界面最基本的组成部分,是一个以可视化的图形方式显示于屏幕上与用户进行交互的对象。Java中包含许多的基本组件,如按钮、标签、滚动条、列表、单选/复选框等等。使用Java语言进行图形用户界面设计过程中,需要用到两类组件,一类是AWT类的组件,另一类是Swing组件,AWT和Swing都是Java设计GUI用户界面的基础。一、图形用户界面概述2.容器顾名思义,容器是用来容纳组件的。容器(Container)是Component类的子类,由Container类的子类和间接子类创建的对象均称为容器,容器本身也是一种组件,可以通过add()方法向容器中添加组件,也可以把一个容器添加到另一个容器中以实现容器的嵌套,容器具有组件的所有性质。Java中AWT和Swing组件各有三类常用的容器,AWT的容器有Frame、Panel和Applet,Swing的容器有JFrame、JPanel和JApplet,另外Swing还有JScrollPane(滚动窗格)、JSplitPae(拆分窗格)和JLayeredPane(分层窗格)等容器。一、图形用户界面概述3.AWT组件AWT是API为Java程序提供的建立图形用户界面GUI工具集,AWT可用于JavaApplet和Application中。它提供用户界面组件、事件处理模型、图形和图像工具、布局管理器等,可以进行灵活的窗口布局,与特定窗口的尺寸和屏幕分辨率无关。java.awt包中提供了GUI设计所需的类和接口,主要包括组件、容器与布局管理器等相关概念。由java.awt包中的类创建的组件称为重组件,每创建一个组件时,都有一个相应的本地组件在为它工作,AWT组件设计原理是把与显示组件有关的许多工作和处理事件的工作交给相应的本地组件。基于重组件的GUI设计有许多不足之处,如同一程序在不同的平台可能有不同的外观呈现,使用AWT进行GUI设计会消耗大量的系统资源。一、图形用户界面概述CardLayoutBorderLayoutFlowLayoutComponentTextComponentScrollBarListLabelContainerChoiceCheckBoxCanvasButtonComponentComponentComponentComponentComponentAWTEventMenuComponentGridBagLayoutGridlayoutjava.awtTextAreaTextFieldMenuItemMenuBarCheckBoxMenuItemPopupMenuMenu一、图形用户界面概述4.Swing组件Swing是以AWT为基础构建的,javax.swing包提供了更加丰富的、功能更强的Swing组件,它的大多数组件都是在AWT组件前面加一个“J”,Swing组件的用法与AWT基本相同,也使用AWT的事件处理机制,只是组件风格不同,同时也增加了一些原来没有的组件特性。Swing组件无需同位体,故称为轻组件。由于Swing组件在设计上和AWT完全不同,轻组件把与显示组件有关的许多工作和处理事件的工作交给相应的java程序完成,这些类被添加到Java的运行环境中,具有外观不依赖平台的功能特性,且具有更高的性能。一、图形用户界面概述ComponentContainerJComponentWindowJDialogJFrameDailogFrameJPanelJTableJTreeJTextAreaJTextFieldJButton一、图形用户界面概述5.组件与容器的关系

在Java中必须理解容器和组件两个基本概念,以及它们之间的关系。(1)Java把由Component类的子类或间接子类创建的对象称为一个组件。(2)Java把由Container的子类或间接子类创建的对象称为一个容器。(3)可以向容器添加组件。Container类提供了一个public方法add(),一个容器可以调用这个方法将组件添加到该容器中。(4)调用removeAll()方法可以清除容器中的所有组件,调用remove(Componentc)可以在容器中删除指定参数的组件。(5)每当容器添加新的组件或删除组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。(6)容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。一、图形用户界面概述框架与面板

1.Frame框架框架是Window类的直接子类,因而框架是窗口的一种,是顶级窗口。JFrame组件在Java的顶层窗口中可以独立使用,包含标题、边框、菜单等。框架是一个容器,可以在这个容器中放入其他一些图形用户界面组件,如按钮等,从而组成一个功能完善的程序。方法功能Frame()建立一个没有标题的Frame类对象Frame(Stringtitle)建立一个标题为title的Frame类对象setsize(intwidth,intheight)设置Frame对象的宽和高setBackground(Colorc)设置Frame对象的背景色setVisible(booleanb)设置Frame对象的可见性StringgetTitle()获得Frame对象的标题voidsetTitle(Stringtitle)设置Frame对象的标题BooleanisResizable()测试窗口是否可以改变大小ImagegetIconImage()返回窗口的最小化图标voidsetIconImage(Imageimg)设置Frame对象的最小化图标setBounds(intx,inty,intwidth,intheight)设置Frame对象的大小和位置一、图形用户界面概述使用框架:(1)框架创建(2)框架外观控制(3)框架信息显示importjavax.swing.*;importjava.awt.*;publicclassHelloWorld{ publicstaticvoidmain(Stringargs) { TextFrameframe=newTextFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show();}}classTextFrameextendsJFrame{ publicTextFrame(){ setTitle("HelloWorld");setSize(WIDTH,HEIGHT); TextPanelpanel=newTextPanel(); ContainercontentPane=getContentPane(); contentPane.add(panel); } publicstaticfinalintWIDTH=300; publicstaticfinalintHEIGHT=200;}classTextPanelextendsJPanel{ publicvoidpaintComponent(Graphicsg){ super.paintComponent(g);g.drawString("Hello,World!",x,y);} publicintx=100;publicinty=100;}一、图形用户界面概述2.Panel面板Panel面板类为Container类的子类,也是一种容器,可容纳其它组件(使用add()方法添加),但它不是顶层窗口,不能独立存在,必须被添加到其它容器中,所以一般创建一个Panel面板对象后,需将其放入Window和Frame中,这样才能看见Panel面板中的内容。该类中比较重要的方法如下:

方法功能Panel()创建一个Panel类对象,布局管理器为默认的flowLayoutPanel(LayoutManagerlayout)创建一个Panel类对象,将layout设置为默认布局管理器二、Swing常用组件AbstractButtonJComboBoxJFileChooserJInternalFrameJLabelJLayeredPaneJListJMenuBarJPanel……JTableJTextComponent……JButtonJMenuItemJToggleButtonJCheckBoxJDesktopPaneJEditorPaneJTextAreaJTextFieldJCheckBoxMenuItemJMenuJRadioButtonMenuItemJRadioButtonJFormattedTextFieldJPasswordFieldJComponentjava.awt.containerjava.lang.object二、Swing常用组件1.文本组件Java提供的文本组件包括两个:用于单行文本输入的文本域(JTextField)和用于多行输入的文本区(JTextArea),使用getText方法获得文本域所做的修改: addl=Integer.parseInt(originText.getText().trim());跟踪该文本域的内容,使用文档监听器: DocumentListenerresultListener=newResultListener(); originText.getDocument().addDocumentListener(resultListener);当文本发生改变后,下面三个方法之一会被调用: voidinsertUpdate(DocumentEvente) voidremoveUpdate(DocumentEvente) voidchangedUpdate(DocumentEvente)当文本中的内容被添加或删除时,前两个方法会被调用,而对于文本域来说,第三个方法则不会被调用。为了对文本的改变进行处理,需要实现这三个方法。当需要重新设置文本域的内容时,可以使用setText方法:resultText.setText(S),其中s是String类型的变量。

二、Swing常用组件2.标签

JLablelabel=newJLabel("NoWrapArea",JLabel.LEFT);通过上面的代码建立了一个标签对象,其显示的文本是“NoWrapArea”,对齐方式为左对齐。3.按钮按钮的使用是相当简单的。为了在按钮上显示相应的信息,可以提供初始的文本和图标。loginButton=newJButton("登录",newImagelcon("login.gif"));文件"login.gif"必须在当前目录下,另外当希望按钮对单击动作有所反应时,需要为按钮注册一个事件监听器,并且实现这个事件监听器,就可以完成所需要的按钮功能。//注册事件监听器loginButton.addActionListener(newLoginAction());//实现事件监听器privateclassLoginActionimplementsActionListener二、Swing常用组件4.单选按钮组件单选按钮组件是一组互斥按钮,即一次只能选择其中的一个选项,选项的选取只需要单击即可。要使单选按钮有效,需要新建一个ButtonGroup类型的对象,然后把JRadioButton类型的对象添加到ButtonGroup对象中。为指定单选按钮的初始选项,在新建JRadioButton对象时,将其构造器的第二个参数设置为"true",同时其他按钮对象的第二个参数设置为"false"。二、Swing常用组件5.复选框组件复选框组件可以进行多重选择,即我们能够选择其中的多个选项,如果要取消或选取选项,可以单击此选项。和单选按钮不同,复选框允许用户选择多个选项。通过单击复选框来选取该选项,再单击一下,则取消选取。建立复选框组件对象需要使用标签来表明该复选框的含义,标签在复选框构造器里进行设置,对复选框是否被选取可以通过isSelected方法进行状态判断。在进行文本编辑时,我们经常会遇到设置字体风格的问题,即需要在多个字体风格中进行多项选择。二、Swing常用组件6.列表框组件

列表框组件允许用户从一个列表中选择一个或多个条目,用户可以从列表框中选择一个或多个条目。建立列表框前,需要指定所显示的列表条目。如果列表框比较长,而显示屏幕比较小,我们可以设置列表中显示的行数,同时使用滚动条。选择列表框中的多个条目有连续条目选择和间断条目选择两种方式。连续条目的选择方法是在选择第一个条目后,按住Shift键,然后选择需要的最后一个条目。间断条目选择的方法是按住Ctrl键,然后选择需要的条目。当用户选择列表框条目时,列表框就会产生选择事件。列表框的事件监听器和前面的组件不同,它需要将列表选择监听器ListSelectionListener添加给列表组件,并在该监听器中实现valueChanged方法。获得用户所选择的列表框条目以及条目所在的索引号需要使用getSelectedValues方法和getSelectedlndices方法。二、Swing常用组件7.组合框组件

组合框组件将编辑框和下拉列表框结合起来,使得用户可以在一组预定义的选项中选择一个条目,而且能够修改选项内容。新建一个有内容的组合框既可以像列表框那样指定数组,也可以采用向组合框对象里加入条目的方法,对组合框是否能够被编辑也可以进行设置。组合框的内容是可以动态变化的。addltem方法能够把条目添加到列表的末尾,insertltemAt方法将把新条目添加到列表的任何位置,removeltem方法和removeltemAt方法将能够删除指定条目,removeAllltems方法将删除所有条目,组合框的条目位置是从0开始的。当选择一个条目时,组合框就产生一个事件,对事件的监听需要添加事件监听器,并实现actionPerformed方法。当组合框的选择事件发生时,可以通过getSelectedltem方法来获取当前被选择的条目。二、Swing常用组件8.滑块组件滑块组件一般包含有一个连续区间和一个可拖动的滑块,用户可以通过拖动这个滑块在这个区间范围里进行选择。构造滑块需要给定连续区间范围和滑块的初始值,如果不指定这些值,将默认为0、100和50。当滑块被拖动时,滑块的值将发生变化,于是触发ChangeEvent事件,这些事件将发送到监听器上。滑块组件的事件监听器要实现ChangeListener接口,并实现此接口中的stateChanged方法。当滑块值发生变化时,可以使用getValue方法来获得滑块值。三、事件处理事件处理原理

Java中定义了各种不同类型的事件类,用来描述各种类型的用户操作。这个过程将涉及三个主要概念:(1)事件:事件是描述用户所执行的一个操作,所产生的一个行为。(2)事件源:事件是由事件源产生的,事件的产生者称为事件源,一般指产生事件的组件对象。(3)事件处理方法:负责解析处理事件的类的对象,用以实现和用户交互的方法。事件源拥有自己的方法,通过它向其注册事件监听器。事件监听器是一个类的实例,这个类实现了一个称为Listener-interface的特殊接口。当事件源产生一个事件以后,事件源就会发送通知给相应的事件监听器,监听器对象根据事件对象内封装的信息决定如何响应这个事件。三、事件处理Java的事件处理方法主要基于"事件授权模型"的处理机制,事先定义多种事件类型(用户对组件的操作),当用户对某个事件源进行操作时,触发相应的事件。如果组件注册了事件监听器,事件被传送给已经注册的监听器,事件监听器负责处理事件。一个事件源可以注册一个或多个监听器,一个监听器也可以被注册到多个事件源。java.awt.AWTEventjava.util.EventObjectActionEventAdjustmentEventComponentEventItemEventTextEventFocusEventPrintEventInputEventWindowEventContainerEventKeyEventMouseEvent三、事件处理事件授权模型实现事件处理的主要步骤包括:(1)选择组件作为事件源,不同类型的组件会产生特定类型的事件。(2)定义要接收并处理某种类型的事件,注册相应的事件监听器类。通过调用组件方法向组件注册事件监听器。可以通过以下方法来注册监听器对象:eventSourceObject.addEventListener(eventListenerObject);(3)实现监听器类的实例对象,据此作为事件的监听器对象。(4)事件源通过实例化事件类激发并产生事件,事件被传送给已经注册的一个或多个监听器,事件监听器在接收到事件消息后负责实现相应的事件处理方法。三、事件处理下面以按钮类为例来说明事件处理的具体过程:MyActionListenerlistener=...;JButtonbutton=newJButton("提交");button.addActionListener(listener);监听器对象listener所属的类MyActionListener必须实现相应的接口,以响应事件,在这里MyActionListener要实现接口ActionListener。ActionListener接口中只有一个方法actionPerformed。所以MyActionListener要实现actionPerformed方法。相应的代码如下: publicclassMyActionListenerimplementsActionListener{ …… publicvoidactionPerformed(ActionEventevent){......} }当用户按下按钮时,JButton对象就会创建一个ActionEvent对象,然后调用监听器对象listener的actionPerformed方法来处理这个事件对象。可以为一个事件源注册多个监听器对象,这样当事件产生时,多个监听器对象都会收到通知。三、事件处理按钮点击事件捕获窗口事件

AWT事件层次结构

EventObjectAWTEventActionEventAdjustmentEventCompnentEventItemEventTextEventContainerEventFocusEventInputEventPaintEventWindowEventKeyObjectMouseObject三、事件处理传递给监听器的AWT事件类型

java.awt.event包中包含许多监听器接口

ActionEventItemEventAdjustmentEventKeyEventComponentEventMouseEventContainerEventTextEventFocusEventWindowEventActionListenerItemListenerAdjustmentListenerKeyListenerComponentListenermouseListenerContainerListenerTextListenerFocusListenerWindowListener三、事件处理包含多个方法的监听器接口并不止WindowListener一个,它们也都有对应的适配器类不同的事件源产生不同的事件,不同的事件对应不同的监听器接口,不同的监听器接口有不同的方法。

CompnentAdapterMouseAdapterContainerAdapterMouseMotionAdapterFocusAdapterKeyAdapter三、事件处理焦点事件

同一时刻在同一个窗口内最多只能有一个组件拥有焦点。除了可以通过鼠标点击或通过TAB键进行组件间焦点的切换,还可以通过程序来控制焦点的切换,通过使用transferFocus方法,把焦点移动到TAB顺序中的下一个组件上。但并不是每个组件都能够接收焦点,例如标签组件就不能接收焦点。还可以使某些组件不能获得焦点,这需要重载isFocusTravers是able方法,使其返回false,从而使得该组件不能接收焦点。三、事件处理键盘事件

KeyListener接口中有三个方法:publicvoidkeyPressed(KeyEvente)publicvoidkeyReleased(KeyEvente)publicvoidkeyTyped(KeyEvente)当用户按下某个键时,就会生成一个名为KEYPRESSED的按键事件,松开键时,就会生成一个名为KEYRELEASE的按键事件。可以在实现了KeyListener接口的监听器类中用keyPressed方法和keyReleased方法对这些事件进行处理。不过它们只能处理原始的按键,而keyTyped方法可以处理由于按键所产生的一系列字符。三、事件处理鼠标事件

当用户点击一个鼠标按键后,会调下如下三个监听器方法:●mousePressed:鼠标键被按下时调用。●mouseReleased:鼠标键被释放时调用。●mouseClicked:合并上述两个事件为一次鼠标点击事件。以上三个方法在MouseListener接口中定义。如果只想捕获整个点击操作,可以忽略mousePressed方法和mouse-Released方法。这三个方法的参数是MouseEvent,通过getX和getY方法,能够得到鼠标点击时鼠标指针的x和y坐标。通过getClickCount方法,可以区别是单击操作,还是双击操作。为了区分鼠标事件中的不同鼠标按键,例如鼠标左键、鼠标右键,可以将getModifiers的返回值与BUTTONI_MASK、BUTTON2_MASK和BUTTON3_MASK进行比较。需要注意的是,在Windows操作系统中,BUTTON3_MASK实际上测试的是鼠标右键。四、布局设计与边界

一个好的界面首先应该是布局合理的,Java提供了布局工具以支持用户界面元素的自动定位。布局管理器为容器规划布局,容器仅记录其所包含的组件,而布局管理器则用于管理组件在容器中的布局,负责管理容器中的各个组件的排练顺序、位置、组件大小等,当容器移动或改变大小时,应相应改变组件的大小和位置。java.awt包中定义有FlowLayout、BorderLayout、CardLayout、GridLayout、GridBagLayout五种布局,它们都是java.lang.object类的子类,每一种布局都对应于一种布局策略。java.swing包中定义有BoxLayout、ScrollPanelLayout、ViewportLayout、OverLayout四种布局。不同的布局管理器采用不同的布局策略放置组件。四、布局设计与边界布局设计

1.FlowLayout流布局FlowLayout流布局管理器根据按钮的数目自动对按钮进行了排列,因此不需要关注按钮数目以及大小的改变对布局所造成的影响,流布局管理器会处理好。甚至当改变框架大小时,这些按钮仍会在流布局管理器的控制下重新排列。流布局管理器的特点是在一行上水平排列组件,直到该行没有足够的空间为止,然后另起一行继续排列。当用户缩放容器时,布局管理器将进行自动控制,重新排列,可以指定流布局管理器的组件排列方式。构造方法功能FlowLayout()创建一个FlowLayout居中布局FlowLayout(intalign)创建一个FlowLayout布局,对齐方式为alignFlowLayout(intalign,inthgap,ingvgap)创建一个FlowLayout布局,对齐方式为align,组件间水平和垂直距离分别为hgap,vgap四、布局设计与边界2.BorderLayout边界布局BorderLayout布局是一种简单的布局策略,是Window、Frame、Dialog的默认布局策略,它们的内容面板的默认布局都是Borderlayout布局。边界布局管理器的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH,可以把组件放在这五个位置的任意一个,如果未指定位置,则缺省的位置是CENTER。采用边界管理器进行布局时,四周的组件先被放置,剩余的空间由位于中间的组件占用;当容器的大小改变时,四周组件的厚度不会被改变,而中间组件的大小需要改变。在使用边界布局管理器时,通常都要使用面板将一些小组件组织在一起,如按钮、文本域等,然后再将面板置于边界布局管理器中的不同位置上。由于容器能够容纳其他容器或组件,因此通过使用层次化的容器,能够精确地定位各个组件。方法功能BorderLayout()创建一个BorderLayout布局BorderLayout(inthgap,ingvgap)创建一个BorderLayout布局,组件间水平和垂直距离分别为hgap,vgapadd(Componentcomp,Objectcon)添加组件,comp指定被加入的组件,con指定位置四、布局设计与边界3.CardLayout卡式布局CardLayout卡式布局管理器可实现多个组件在同一容器区域内重叠放置,交替显示。通过用户操作可将组件一个个显示出来,即容纳多个组件的同时只能选择显示一个组件,就如叠扑克牌,每次只能显示最上面的一张,这个被显示的组件占据所有的容器空间。方法功能CardLayout()创建一个CardLayout布局CardLayout(inthgap,ingvgap)创建一个CardLayout布局,组件间水平和垂直距离分别为hgap,vgapadd(Stringtext,Componentcomp)将组件comp加入容器中,对应文本为Textfirst(Containerc)显示Container中的第一个对象last(Containerc)显示Container中的最后一个对象previous(Containerc)显示Container中的上一个对象next(Containerc)显示Container中的下一个对象四、布局设计与边界4.GridLayout卡式布局GridLayout网格布局管理器是使用较多的布局管理器,它在一个二维的网格中布局组件,其基本布局策略是把容器划分成若干行和列的网格区域,每个网格的大小相等,组件就位于这些小格中,一个网格可以放置一个组件。使用GridLayout网格布局管理器时,需要指定行数和列数,这种布局管理器的容器中的组件忽略首选的高度和宽度。GridLayout网格布局比较灵活,可由程序自由控制,组件定位比较精确。方法功能GridLayout()创建一行一列的GridLayout布局GridLayout(introws,ingcols)创建一个rows行cols列的CardLayout布局GridLayout(introws,ingcols,inthgap,intvgap)创建一个rows行cols列的CardLayout布局,组件的水平和垂直距离为hgap,vgap四、布局设计与边界5.GridBagLayout卡式布局GridbagLayout网格包布局管理器是Java语言提供的最复杂、最灵活的布局管理器之一,采用网格的形式放置组件,组件的位置和大小由gridbagConstraints类的对象实例决定。GridbagLayout类规范组件使用GridbagLayout网格包布局管理器的限制条件。GridbagLayout网格包布局管理器允许指定的组件跨多行或多列,且行和列不要求同高或同宽,同时允许组件部分重叠。方法功能GridbagLayout()创建一个GridbagLayout布局对象setConstraints(Componentcomp,GridBagConstraintscon)设置网格包限制条件add(Componentcomp,Objectcon)添加组件并用con指定GridBagConstraints类的一个实例四、布局设计与边界6.BoxLayout盒式布局BoxLayout盒式布局管理器用来创建一个盒式布局对象,BoxLayout在java.swing.border包中。java.swing包提供了Box类,该类是Container类的一个子类,据此创建的容器称为盒式容器,其默认布局是盒式布局,且不允许修改。因此在策划程序布局时,可以利用若干盒式容器的嵌套达到布局目的。BoxLayout类的方法方法功能BoxLayout(Containercon,intaxis)创建一个BoxLayout布局getLayoutalignmentX(Containercon)获得容器沿X轴的对齐方式:行排列getLayoutalignmentY(Containercon)获得容器沿Y轴的对齐方式:列排列setLayoutalignmentX(Containercon)设置容器沿X轴的对齐方式:行排列setLayoutalignmentY(Containercon)设置容器沿Y轴的对齐方式:列排列LayoutContainer(Containercon)设置con窗口的布局方式为BoxLayout四、布局设计与边界边界

当界面中的组件比较多时,需要从视觉上将组件分隔开。通用的办法是为面板设置边界,并将需要分隔的组件添加到该面板中。可选的边界风格包括低斜面、凸斜面、蚀刻、直线、不光滑、空。创建边界需要调用BorderFactory的静态方法。当需要给边界增加标题以提示时,可以使用BorderFactory的createTitledBorder方法。当创建好需要的边界后,就可以把边界对象添加到组件中:buttonPanel.setBorder(titled)五、菜单设计Java中,一般菜单格式包含菜单栏、菜单、菜单项等类组件,菜单放在菜单栏里,菜单项放在菜单里。

JMenuBar类方法功能说明JMenuBar()创建一个空的菜单栏SetJMenuBar(JmenuBarmenubar)将菜单栏添加到窗口JMenu类方法功能说明JMenu()创建一个菜单对象JMenu(StringmenuName)创建一个名为menuName的菜单对象voidadd(Strings)向菜单增添指定的菜单选项getItem(intn)获得指定菜单项getItemCount()获得菜单选项数目add(JmenuItemitem)将菜单项item添加到菜单对象中addSeparator()菜单中增加一条分隔线五、菜单设计JMenuBar类方法功能说明JMenuBar()创建一个空的菜单栏SetJMenuBar(JmenuBarmenubar)将菜单栏添加到窗口JMenu类方法功能说明JMenu()创建一个菜单对象JMenu(StringmenuName)创建一个名为menuName的菜单对象voidadd(Strings)向菜单增添指定的菜单选项getItem(intn)获得指定菜单项getItemCount()获得菜单选项数目add(JmenuItemitem)将菜单项item添加到菜单对象中addSeparator()菜单中增加一条分隔线五、菜单设计MenuBar类方法功能说明MenuBar()创建一个空的菜单栏add(Menum)将菜单对象m添加到菜单栏中Menu类方法功能说明Menu()创建一个菜单对象Menu(StringmenuName)创建一个名为menuName的菜单对象add(MenuItemitem)将菜单项item添加到菜单对象中addSeparator()菜单中增加一条分隔线MenuItem类方法功能说明MenuItem(StringitemName)创建一个菜单项,显示为itemNamegetActionCommand()返回菜单项所产生的动作事件关联的命令名称disable()非使能菜单项CheckBoxMenuItem(Strings)创建标题为s的带复选框的菜单项getstate()返回复选框菜单项对象的状态setState(booleanstate)设置复选框菜单项对象的状态JPopupMenu类方法功能说明PopupMenu(Strings)创建名为s的弹出式菜单项show(Componentc,intx,inty)在(x,y)处显示弹出式菜单,c为该弹出式菜单的组件五、菜单设计菜单创建步骤(1)创建一个菜单栏(JMenuBar/MenuBar)对象,将其添加到所建框架(JFrame/Frame)中。(2)创建菜单(JMenu或Menu)对象及其子菜单。(3)创建菜单项(JMenuItem或MenuItem)对象,并将其添加到菜单或子菜单对象中。(4)将菜单对象添加到菜单栏对象中。上述步骤仅是创建了菜单的框架,若要实现其菜单功能,还必须将事件监听器注册到菜单项,并在监听器提供的事件处理中加入相应的代码以完成相应功能。六、对话框设计对话框分为模式对话框和无模式对话框,模式对话框必须在用户处理完后才允许用户与主窗口继续进行交互,例如当用户单击"退出"按钮时,弹出模式对话框强迫用户确认,这也是本节的示例内容。无模式对话框允许用户同时在对话框和程序剩余部分中输入信息,如工具栏,用户能够同时与应用程序窗口和工具栏进行交互。Swing下对话框(JOptionPane和JDialog)相对AWT中的Dialog对话框来说,具有更强大的功能,能够更完善地显示和获得信息,完成与用户的交互。Swing使用JOptionPane类提供许多可直接使用的标准对话框,如消息对话框、确认对话框、输入对话框等。若JOptionPane提供的对话框仍不能满足要求,则可以使用JDialog类自行设计对话框。六、对话框设计方法功能JOptionPane()创建一个显示信息的JOptionPane对象JOptionPane(Objectmsg,intmsgtype)创建一个指定信息和显示类型的JOptionPane对象JOptionPane(Objectmsg,intmsgtype,intoptiontype,Iconicon)创建一个指定信息和显示类型的JOptionPane对象,并可设置选项和图标JDialog()创建一个非模式对话框JDialog(Dialogowner,Stringstr)创建一个具有指定标题的非模式对话框JDialog(Dialogowner,booleanmodel)创建一个模式或非模式的对话框JDialog(Dialogowner,Stringstr,Booleanmodel)创建一个模式或非模式的具有指定标题的对话框showInputDialog(Objectmsg)创建一个具有指定信息的输入对话框showInputDialog(ComponentparentC,Objectmsg,Stringstr,itmsgtype)创建一个具有依赖组件、指定信息、标题和消息类型的输入对话框showMessageDialog(Objectmsg)创建一个具有指定信息的信息对话框showMessageDialog(ComponentparentC,Objectmsg,Stringstr,itmsgtype)创建一个具有依赖组件、指定信息、标题和消息类型的信息对话框showConfirmDialog(Objectmsg)创建一个具有指定信息的确认对话框showConfirmDialog(ComponentparentC,Objectmsg,Stringstr,itmsgtype)创建一个具有依赖组件、指定信息、标题和消息类型的确认对话框getTitle()/setTitle(Stringtitle)获得/设置对话框的标题setModal(booleanb)/setSize()设置对话框的模式/设置对话框的大小setVisible(booleanb)显示或隐藏对话框六、对话框设计1.JOptionPane对话框JOptionPane类提供了多种可供用户使用的对话框以及相应的静态方法,通过指定方法参数,可以容易地引用该类赋予的对话框。JOptionPane提供了四种简单的对话框:(1)showMessageDialog:显示一条消息等待用户点击OK。(2)showConfirmDialog:显示一条消息并等待用户确认。(3)showOptionDialog:显示一条消息并等待用户在一组自定义选项中的选择。(4)showlnputDialog:显示一条消息并等待用户的输入。底部按钮类型和对话框有密切的关系,对于showMessageDialog和showlnputDialog对话框来说,只能有一组标准按钮,分别是OK和OK/CANCEL。对于showConfirmDialog,按钮可以包括四种:DEFAULT_OPTION,YES_NO_OPTION,YES_NO_CANCEL_OPTION,OK_CANCEL_OPTION。可以对消息类型进行控制:ERROR_MESSAGE,INFORMATION_MESSAGE,WARNING_MESSAGE,QUESTION_MESSAGE,PLAIN_MESSAGE。消息类型将控制对话框上显示的图标。六、对话框设计2.JDialog对话框若JOptionPane提供的对话框仍不能满足要求,则可以使用JDialog类自行设计对话框。JDialog类和JFrame类都是Window的子类,两者都依赖于某个窗口或组件,都可以将相关组件添加到JDialog的内容面板ContentPane中,当它所依赖的窗口或组件消失,对话框也小时,而它所依赖的窗口或组件可见时,对话框又会自动恢复。通过建立JDialog的子类来建立一个对话框类,然后这个类的一个实例就是一个对话框。对话框的脊背结构类似JFrame框架,但应注意下面几个问题:(1)不可将组件直接添加到对话框中,JDialog应含有一个内容面板ContentPane容器(2)对话框通过调用方法getContentPane()方法得到内容面板(3)不能为JDialog设

温馨提示

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

评论

0/150

提交评论