




已阅读5页,还剩149页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,6.1创建图形界面,6.4菜单组件,6.2AWT的事件模型,6.3AWT常用组件,6.5图形设计,2,容器,界面的构成,创建GUI各组成成分,并安排从属位置关系(包含,相邻,相交)定义GUI各成分对不同事件的响应,实现与用户的交互与界面功能,3,界面元素,容器是用来组织其他界面成分和元素的单元。可以形成容器的层次,构筑复杂结构Window(Frame、Applet、Dialog)组件是图形用户界面的基本单位,它里面不再包含其他的成分。GUI组件是图形用户界面标准化的结果。GUI组件的作用是完成与用户的交互。,4,用户自定义成分文字、图形、图象不能像标准组件一样被系统识别和承认,只起装饰作用。不能响应用户的动作,不具有交互功能。,界面元素,5,抽象窗口工具-AWT,AbstractWindowsToolkit(抽象窗口工具)AWT类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行的。抽取不同软硬件平台中所实现的窗口的公共特性。所设计的界面独立于具体的界面实现。提供与机器无关的基本GUI标准组件。选择类组件:单选按钮、复选框、下拉选单、列表框文字处理类组件:标签、文本框、编辑框。命令类组件:按钮、工具栏、菜单等。,6,FramePanelApplet,常用容器,7,java.lang.Object|+-java.awt.Component|+-java.awt.Container|+-java.awt.Window|+-java.awt.Frame,Frame,8,importjava.awt.*;classMyFramepublicstaticvoidmain(Stringargs)Framef=newFrame(myframe);f.setSize(600,400);f.setLocation(100,100);f.setBackground(Color.blue);Buttonbtn=newButton(ButtonTest);f.add(btn);f.show();,Casestudy:MyFrame.java,9,Casestudy:MyFrame.java,10,Panel,java.lang.Object|+-java.awt.Component|+-java.awt.Container|+-java.awt.Panel,11,Casestudy:MyFrame1.java,12,LayoutManager(布局管理器),为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。,13,LayoutManager,FlowLayout是Panel的缺省布局管理器将组件逐个地放在容器的一行上,当一行放满后重起一行。BorderLayout(Frame和Dialog两种容器的默认布局管理器,区域的默认值是Center)容器被划分为5个区域:East、South、West、North、Center。GridLayout网格式布局CardLayout卡片式布局GridBagLayout网格包布局,14,LayoutManager(布局管理器),在程序中安排组件的位置和大小时,应该注意:容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null);,15,Casestudy:MyLayout.java,16,BorderLayout,Window,Frame和Dialog的缺省布局管理器。BorderLayout布局管理器包括5个区域:North,South,East,West和Center。,17,Casestudy:MyLayout1.java,18,19,GridLayout,Casestudy:MyLayout2.java,20,FrameFrame是一个顶级窗口。Frame的缺省布局管理器为BorderLayout。PanelPanel无法单独显示,必须添加到某个容器中。Panel的缺省布局管理器为FlowLayout。当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器。因此,可以利用Panel使得BorderLayout中某个区域显示多个组件。,Payattention:,21,22,23,CardLayout,CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间。,24,25,26,27,GUI事件处理,28,WhatisanEvent?,Event事件,就是发生在用户界面上的用户交互行为所产生的一种效果。EventSource产生事件的对象。Eventhandler接收事件对象并对其进行处理的方法。,29,事件处理模型,Hierachicalmodel(JDK1.0)事件传递机制。Delegationmodel(JDK1.1,1.2)授权处理机制。,30,Java以前的事件模型,以前的JDK1.0AWT使用的是“基于继承的事件模型”,在该模型Component类中定义了一系列事件处理方法,如:handleEvent,mouseDown,mouseUp等等,我们对事件的响应是通过对组件类继承并覆盖相应的事件处理方法的手段来实现,组件接收到事件向所在容器广播,沿着容器链直到发现事件被某个容器的handle方法所处理。这种模型有很多缺点,事件的处理不应当由事件产生者负责,而且根据“设计模式”一书中的原则,“继承”通常被认为是“对封装性的破坏”,父子类之间的紧密耦合关系降低了灵活性,同时继承容易导致家族树规模的庞大,这些都不利于组件可重用。,31,JDK1.0的事件模型:层次模型,32,importjava.awt.*;importjava.applet.*;publicclassAwttestextendsAppletButtonb1=newButton(button1);Buttonb2=newButton(button2);Buttonb3=newButton(button3);publicvoidinit()add(b1);add(b2);add(b3);publicbooleanaction(Eventevt,Objectarg)if(evt.target.equals(b1)showStatus(button1);elseif(evt.target.equals(b2)showStatus(button2);elsereturnsuper.action(evt,arg);returntrue;,Casestudy:Awttest.java,33,事件控制的要点,Java最新的事件处理方法是基于授权事件模型事件源生成事件并将其发送至一个或多个监听器监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。,34,事件,在授权事件模型中,事件是一个描述事件源状态改变的对象。通过鼠标、键盘与GUI界面直接或间接交互都会生成事件。如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。,35,事件源,事件源的责任:提供注册的方法,允许监听器为了获得特定类型的事件通知进行注册产生一个事件把事件发送到所有注册过的监听器:广播和单播,36,监听器,监听器的责任:向事件源注册,以便收到特定事件的事件通知。实现接口,接收该类型的事件如果不再要求事件通知,取消注册。,37,JDK1.1的事件模型:委托模型将事件源对象和事件处理器(事件监听器)分开。事件监听器:实现了监听器接口的类。一个监听器对象是一个实现了专门的监听器接口的类的实例。,38,使用JDK1.1授权处理模型进行事件处理的一般方法:对于某种类型的事件XXXEvent,要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现针对特定事件的特定接口XXXListener;事件源中产生事件后,必须注册相应于该类事件的监听器,使用addXXXListener(XXXListener)方法来注册监听器。,39,AWT采取的事件控制过程,监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。事件源将在发生事件时向所有注册的监听器发送事件对象。监听器对象使用事件对象中的信息来确定它们对事件的响应。,40,参与各方的关系,41,事件体系结构,42,按钮单击事件示例,publicclassMyEventTestextendsPanelButtonmyButton=newButton(蓝色);./创建面板或其他GUI组件MyListenermyAction=newMyListener();MyButton.addActionListener(myAction);privateclassMyListenerimplementsActionListenerpublicMyListener()./初始化publicvoidactionPerformed(ActionEventevent)./需要为事件进行的操作,实现了ActionListener接口的监听器,实现了actionPerformed方法,以便根据参数ActionEvent对象的信息对事件做出响应,为按钮事件注册监听器,43,Casestudy:MyEvent.java,44,AWT事件类型1,45,AWT事件类型2,46,监听器接口,监听器通过实现java.awt.event包中定义的一个或多个接口来创建。在发生事件时,事件源将调用监听器定义的相应方法。有兴趣接收事件的任何监听器类都必须实现监听器接口。,47,监听器接口列表1,48,监听器接口列表2,49,适配器类,为了使事件处理变得简单,Java为具有多个方法的监听器接口提供适配器类。适配器类实现并提供了一个事件监听器接口中的所有的方法,但这些方法都是空方法。,privateclassMyMouseAdapterextendsMouseAdapterprivateColorbgColor;publicMyMouseAdapter(Colorc)bgColor=c;publicvoidmouseClicked(MouseEventmevent)setBackground(bgColor);repaint();,50,任何GUI对象的获得或失去焦点都被视为焦点事件,并且事件源必须向事件监听器通知事件对象已失去或已获得焦点。焦点监听器需要实现两个方法:focusGained和focusLost。要进行错误检查或数据校验时,对焦点的捕捉就显得尤其重要。,焦点事件,51,焦点事件示例,publicvoidfocusLost(FocusEventevent)if(event.getComponent()=ccField,实现了当捕捉到失去焦点事件时如何响应,检验失去焦点的组件中的文本格式是否正确,如果格式不正确,将焦点移回到该组件,FocusEventDemo.java,52,窗口事件,当一个窗口被激活、禁止、关闭、正在关闭、最小化、恢复、打开时将生成窗口事件。需要实现的方法如下:windowActivated、windowClosedwindowClosing、windowDeactivatedwindowDeiconified、windowIconifiedwindowOpened,53,importjava.awt.*;importjava.awt.event.*;publicclassMyFrame4publicstaticvoidmain(Stringargs)Framef=newFrame(mytest);f.setSize(600,400);f.setLocation(100,100);f.setBackground(Color.blue);f.setLayout(newGridLayout(3,2,10,10);Buttonbtn1=newButton(winsun);Buttonbtn2=newButton(weixin);f.add(btn1,East);f.add(btn2,Center);f.addWindowListener(newMyWindowListener();f.show();classMyWindowListenerimplementsWindowListenerpublicvoidwindowOpened(WindowEvente)publicvoidwindowClosing(WindowEvente)System.exit(0);publicvoidwindowClosed(WindowEvente)publicvoidwindowIconified(WindowEvente)publicvoidwindowDeiconified(WindowEvente)publicvoidwindowActivated(WindowEvente)publicvoidwindowDeactivated(WindowEvente),MyFrame4.java,54,窗口事件示例,classMyFrameextendsFramebooleanw;publicMyFrame()w=false;setTitle(测试适配器类);setSize(300,200);MyPanelpanel=newMyPanel();add(panel);addWindowListener(newMyWindowAdapter();privateclassMyWindowAdapterextendsWindowAdapterpublicvoidwindowClosing(WindowEventwevent)if(w)dispose();elseSystem.exit(0);,实现了windowClosing方法,以响应窗口关闭时的事件,importjava.awt.*;importjava.awt.event.*;publicclassMyAdapterDemopublicstaticvoidmain(Stringargs)MyFramefrm=newMyFrame();frm.show();,55,在按下或释放键盘上的一个键时,将生成键盘事件。keyEvent类包含用来表示按下或点击的键的常量。生成keyEvent时将调用keyListener。如果程序需要处理特殊的键,如方向键,需要通过调用keyPressed()方法来处理。,键盘事件,publicvoidkeypressed(keyEventk)intkeyCode=k.getKeyCode();if(keyCode=k.VK_RIGHTadd(tField);MyKeyAdapterbAction=newMyKeyAdapter();tField.addKeyListener(bAction);privateclassMyKeyAdapterextendsKeyAdapterpublicvoidkeyPressed(KeyEventkevent)setBackground(Color.blue);repaint();publicvoidkeyReleased(KeyEventkevent)setBackground(Color.red);repaint();publicvoidkeyTyped(KeyEventkevent)if(kevent.getKeyChar()=x)System.exit(0);,按下键时背景变为兰色,释放键时背景变为红色,输入字符x时退出程序,57,鼠标事件,任何时候移动、单击、按下或释放鼠标,都会生成鼠标事件。鼠标事件有两种监听器:MouseListener和MouseMotionListener需要实现的方法如下mouseClicked、mouseExited、mouseEnteredmousePressed、mouseReleased、mouseDragged、mouseMoved,58,publicvoidmouseClicked(MouseEventm)intx=m.getX();inty=m.getY();intclickCount=m.getClickCount();if(clickCount=2)Graphicsg=getGraphics();g.drawString(鼠标双击!,x,y);g.dispose();,鼠标事件示例,获得点击鼠标时鼠标指针的x及y坐标,确定单击和双击,AdapterDemo.java,59,多个监听器,所有AWT事件源均支持监听器的多点传送模型。可以将同一事件发送到多个监听器对象。需要向一个事件源添加多个监听器,以便使所有注册的监听器都能够对事件源生成的事件作出响应。,60,java.util.EventObject类EventObject类是所有事件对象的基础类,所有的事件类都是由它派生出来的。publicclassEventObjectimplementsjava.io.SerializableprotectedtransientObjectsource;publicEventObject(Objectsource);publicObjectgetSource();publicStringtoString();,61,62,java.awt.AWTEvent和AWT有关的所有事件类都由java.awt.AWTEvent类派生,AWT事件共有10类,可以归为两大类:低级事件和高级事件。,63,低级事件ComponentEvent(组件事件:组件尺寸的变化,移动)ContainerEvent(容器事件:组件增加,移动)WindowEvent(窗口事件:关闭窗口,窗口闭合,图标化)FocusEvent(焦点事件:焦点的获得和丢失)KeyEvent(键盘事件:键按下、释放)MouseEvent(鼠标事件:鼠标单击,移动),64,高级事件(语义事件)ActionEvent(动作事件:按钮按下,TextField中按Enter键)AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值)ItemEvent(项目事件:选择项目,不选择项目)TextEvent(文本事件,文本对象改变),65,事件类,ActionEvent类:存放这个事件的细节。e.getSource()返回事件发生的对象(名)e.getActionCommand()返回按扭名。ActionListener接口publicvoidactionPerformed(ActionEvente),66,监听者类,某个类可以兼职也可以专职做这件事(实现监听者接口)。一个类若实现一个接口,必须实现接口的全部方法。例如:ActionListener接口只有一个方法:voidactionPerformed(ActionEvente)实现接口的类可以是:一般类内部类匿名类,兼职,专职,内部类,匿名类,67,窗口事件,关闭窗口框时引发WindowEvent事件委托addWindowListener(newWclose();定义监听者类classWcloseimplementsWindowListenerpublicvoidwindowClosing(WindowEvente)System.exit(0);WindowListener类有7个方法,必须都实现WindowAdapter接收窗口事件的抽象适配器类,用空内容实现了WindowListener接口的所有方法classWcloseextendsWindowAdapter,68,ActionEvent事件,引发原因:单击按扭,双击列表框中选项,选择菜单项,文本框中的回车事件监听接口:ActionListener接口方法:actionPerformed(ActionEvente)组件注册该事件方法:addActionListener(监听者),69,TextEvent事件,引发原因:文本框或文本区域内容改变事件监听接口:TextListener接口方法:textValueChanged(TextEvente)组件注册该事件方法:addTextListener(监听者),70,ItemEvent事件,引发原因:改变列表框中的选中项改变复选框选中状态改变下拉选单的选中项事件监听接口:ItemListener接口方法:itemStateChanged(ItemEvente)组件注册该事件方法:addItemListener(监听者),71,AdjustmentEvent事件,引发原因:操作滚动条改变滑块位置事件监听接口:AdjustmentListener接口方法:adjustmentValueChanged(AdjustmentEvente)组件注册该事件方法:addAdjustmentListener(监听者),72,KeyEvent事件,引发原因:敲完键(KEY-TYPED)按下键(KEY-PRESSED)释放键(KEY-RELEASE)事件监听接口:KeyListener接口方法:keyPressed(KeyEvente)键已被按下时调用keyReleased(KeyEvente)键已被释放时调用keyTyped(KeyEvente)键已被敲完时调用KeyEvent方法:charch=e.getKeyChar();事件监听适配器(抽象类)KeyAdapter组件注册该事件方法:addKeyListener(监听者),73,MouseEvent事件,引发原因:(鼠标作用在一个组件上)鼠标事件:鼠标键按下,鼠标键抬起,单击鼠标,鼠标光标进入一个组件,鼠标光标离开一个组件。鼠标移动事件:鼠标移动,鼠标拖动鼠标事件监听接口1:MouseListener接受鼠标事件该接口方法:mouseClicked(MouseEvente)mouseEntered(MouseEvente)鼠标光标进入一个组件mouseExited(MouseEvente)鼠标光标离开一个组件,74,MouseEvent事件(续),鼠标事件监听适配器(抽象类)MouseAdapter鼠标事件监听接口2:MouseMotionListener接受鼠标移动事件该接口方法:mouseMoved(MouseEvente)鼠标光标在组件上移动mouseDragged(MouseEvente)用鼠标拖动一个组件鼠标移动事件监听适配器MouseMotionAdapter组件注册鼠标事件方法:addMouseListener(监听者)组件注册鼠标移动事件方法:addMouseMotionListener(监听者),75,MouseEvent事件(续),MouseEvent方法e.getClickCount()=1单击=2双击Pointe.getPoint()取鼠标光标位置inte.getX()inte.getY()取鼠标光标位置e.getModifiers()=e.BUTTON1_MASK鼠标左键=e.BUTTON3_MASK鼠标右键,鼠标事件,76,WindowEvent事件,引发原因:有关窗口操作引发的事件事件监听接口WindowListener接口方法windowActivated(WindowEvente)激活窗口windowClosed(WindowEvente)调用dispose方法关闭窗口后。windowClosing(WindowEvente)试图利用窗口关闭框关闭窗口windowDeactivated(WindowEvente)本窗口成为非活动窗口,77,WindowEvent事件(续),windowDeiconified(WindowEvente)窗口从最小化恢复为普通窗口windowIconified(WindowEvente)窗口变为最小化图标windowOpened(WindowEvente)当窗口第一次打开成为可见时接口适配器WindowAdapter注册事件方法addWindowListener,78,FocusEvent事件,引发原因:组件获得焦点组件失去焦点事件监听接口FocusListener接口方法:focusGained(FocusEvente)组件获得焦点时调用focusLost(FocusEvente)组件失去焦点时调用接口适配器:FocusAdapter组件注册该事件方法:addFocusListener,79,TextEvent事件,引发原因:当组件(如文本框)文本改变时引发事件监听接口:TextListener接口方法:textValueChanged(TextEvente)组件注册该事件方法:addTextListener,80,ComponentEvent事件,引发原因:当组件移动、改变大小、改变可见性时引发事件监听接口:ComponentListener接口方法:componentHidden(ComponentEvente)组件隐藏componentMoved(ComponentEvente)组件移动componentResized(ComponentEvente)组件改变大小componentShown(ComponentEvente)组件变为可见接口适配器ComponentAdapter组件注册该事件方法:addComponentListener,81,ContainerEvent事件,引发原因:当容器内增加或移走组件时引发事件监听接口:ContainerListener接口方法componentAdded(ContainerEvente)容器内加入组件componentRemoved(ContainerEvente)从容器中移走组件接口适配器ContainerAdapter容器注册该事件方法:addContainerListener,82,事件处理举例一,Casestudy:YourFrame.java,83,事件处理举例二,84,85,86,事件适配器(EventAdapters)ComponentAdapter(组件适配器)ContainerAdapter(容器适配器)FocusAdapter(焦点适配器)KeyAdapter(键盘适配器)MouseAdapter(鼠标适配器)MouseMotionAdapter(鼠标运动适配器)WindowAdapter(窗口适配器),87,事件处理有关问题,有哪些事件类(java.awt.event)?每个事件类的监听者接口?每个监听者接口规定的方法?多方法的监听者接口的适配器(实现接口的抽象类)是什么?组件的事件委托(注册)方法?,88,Java基础类,JFC(JavaFoundationClasses):Java基础类,是关于GUI组件和服务的完整集合,主要包含5个API:AWT、Java2D、Accessibility、DragDrop、Swing。JFC提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包。Java2D是一套图形API,它为Java应用程序提供了一套高级的有关二维(2D)图形图像处理的类。Java2DAPI扩展了java.awt和java.awt.image类,并提供了丰富的绘图风格,定义了复杂图形的机制和精心调节绘制过程的方法和类。这些API使得独立于平台的图形应用程序的开发更加简便。AccessibilityAPI提供了一套高级工具,用以辅助开发使用非传统输入和输出的应用程序。它提供了一个辅助的技术接口,如:屏幕阅读器,屏幕放大器,听觉文本阅读器(语音处理)等等。DragpublicclassSwingTestpublicstaticvoidmain(Stringargs)JFramejf=newJFrame(lemon);jf.setSize(600,400);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JButtonbtn=newJButton(winsun);jf.getContentPane().add(btn,West);jf.show();,Casestudy:SwingTest.java,91,Swing整体介绍,SwingGUI组件所在的包:javax.swingSwing组件的平台相关性较小(lightweight)早期版本的GUI组件所在的包:java.awt与平台相关性较强,92,Swing的优点,Swing取代并加强了AWT,而其究竟有哪些优点呢?主要的有下列几点:1.更多元化的组件除了一些用来取代AWT功能有限的组件外,另也增加了一些功能强大,却使用简易的组件。例如像JcolorChooser、JTree、JTable等。2.MVC结构MVC的结构设计是为了提供用不同的view来看同一data。这样子,图形接口就会显的更富弹性。Model(模型)保存数据与提供数据存取方法。View(景象)视觉外观。Controller(控制者)事件处理控制。,93,Swing的优点,3.PluggableLookandFeel这是一种可随意更换UI组件视觉效果的一种特制功能。用以取代AWT所使用的Peer机制。有Java(metal)、windows、motif、mac这几种。除了上述几点外,在键盘敲击控制、虚拟桌面、嵌套容器等,SWING都提供了更强大便利的功用。,94,JComponent,组件类的层次结构java.lang.Object|+-java.awt.Component|+-java.awt.Container|+-javax.swing.JComponentJComponent大多数Swing组件类父类,95,Swing组件,容器各种组件必须放在容器容器本身也是一种组件分类顶层容器其它容器组件基本控制组件不可编辑的信息显示组件可编辑的信息显示组件,96,一些GUI组件,标签(JLabel)文本框(JTextField)按钮(JButton)复选框(JCheckBox)组合框(JComboBox)文本(JTextArea)框架(JFrame)面板(JPanel),97,Swing组件的分类,1.顶层容器(Top-LevelContainers)JWindowJFrameJDialogJApplet这4个顶层容器,都是属于重量级组件(SWING中只有这4个是属重量级组件),与当地的GUI资源有关。而顶层容器的重要性在于:每一个GUI组件(如JButton)都需被包含在一个顶层容器的包容层级(containmenthierarchy)中。顶层容器可放入menubar,也都含有一个默认的contentPane可供GUI组件放入其中。,包容层级:,98,中间层容器(IntermediateSwingContainers),虽然说每一个SWING组件都是一种容器,但其样式与所能承装的内容却有所分别。有些SWING组件是被设计专门来盛装别的组件用的,作为一种容器,好让被承装的组件能合适地、有组织地被显示出来。这些组件容器,乃是介于顶层容器与一般SWING组件间的,称为中间层容器。这些SWING组件列表如右:,JMenuBarJOptionPaneJRootPaneJLayeredPaneJPanelJInternalFrameJScrollPane.JSplitPaneJTabbedPaneJToolBarJDeskTopPaneJViewPortJEditorPaneJTextPane,99,基本组件(AtomicComponents),除了顶层与中间间层容器外,其余的SWING组件,依其功能又可分为下面3种:,B.用来显示信息:JLabelJProgressBarJToolTip,A.用来取得用户输入:JButtonJRadioButtonJToggleButtonJCheckBox,JComboBoxJListJMenuJSliderJTextFieldJPopupMenuJTextAreaJPassWordField,c.提供格式化信息:JColorChooserJFileChooserJTableJTree,100,JWindow,JWindow基本上与AWT中的Window类似,Window没有边(border)没有标题栏(titlebar),没有菜单栏(menubar),也不能缩放大小。若将Jwindow与Window的构造函数做比较,可发现其多了两个构造函数:JWindow()与JWindow(GraphicsConfigurationgc)JWindow()表示JWindow可不用再附属于任何容器(frame或Window)上。JWindow与Window运用起来的效果差不多,但是JWindow因有RootPane的效果,功能更强大。因此类容器较少应用。,101,框架(JFrame),类JFrame是java.awt.Frame的子类在Swing的组件中,JFrame并不全是由Java编写是一种与平台关系比较密切的组件(Heavyweightcomponent)java.lang.Object|+-java.awt.Component|+-java.awt.Container|+-java.awt.Window|+-java.awt.Frame|+-javax.swing.JFrame,102,JFrame,JFrame是写Application必须使用的顶层组件。JFrame与Frame的不同,除了RootPane的功能外,最显明的一点就是当你去关掉它时,它会正常地被关掉,而不像Frame需要特别处理才能被关掉。,103,JDialog,JDialog与JFrame很类似,也都实现了RootPaneContainer接口。所以也是有RootPnae、ContentPane等。但从其构造函数可看见JDialog必须以一个另一个Dialog或Frame作为其拥有者。这是与JFrame较不同的。JFrame可独立地存在,而JDialog则需依附在其owner上。JDialog(Dialogowner,booleanmodal)JDialog(Frameowner,Stringtitle,booleanmodal)JDialog也没有内建的OK、Cancel等按钮,而需另外自行加上去。这是使用JDialog较不方便的地方。而在JoptionPane中则另外提供类似的对话窗口,使用上就比较方便。modal:当设为true时,对话框显示出来便拥有最高权限,用户不能再另外选别的窗口进行别的操作,而必须将此对话框关闭后才能。而若为false时则可自由选择别的窗口。,104,中间层容器JComponent,JComponent是所有Swing轻量级组件的基类,其地位如同AWT中的Component一样。从层级结构的关系来看,JComponent继承了java.awt.container。也就是说它是一种容器。也就是说:Swing组件中可放入别的Swing组件。随着JComponent提供了几乎所有Swing组件的基础结构,所以也就提供了超过100个的公用方法。JComponnt提供了下列几类的功能给继承它的Swing组件:,105,1.设置边框Swing包中有一个BorderFactory类专门来产生各类的边框。提供了多种的边框,像BevelBorder、CompoundBorder、LineBorder、TitleBorder等。只要用:voidsetBorder(Borderborder)就可以设置一个组件的边框。2.自动卷动像JList、JTable等组件,当鼠标指到其边界范围外时,便会自动往那个方向卷动。可用:voidsetAutoscrolls(booleanautoscrolls)来设置。但JList与JTable等都是默认autoscrolls为true。,106,3.工具提示Window、Frame、Dialog部分,Window可作泡沫辅助说明窗口(bubblehelp),也就是这里的工具提示(tooltips)。简单的利用下列方法:setToolTipText(Stringtext)然而Swing所提供的tooltip,不仅限于简单的文字字符串而已,另有一个JtoolTip类专门来做这类的处理,使tooltip更多样化。在JSDK中的示范程序,就有很好的示范。,107,4.键盘敲击处理JComponent提供了一些键盘敲击处理(keystrokehandling)的字段与方法staticintWHEN_ANCESTOR_OF_FOCUSED_COMPONENTvoidregisterKeyboardAction(ActionListeneranAction,KeyStrokeaKeyStroke,intaCondition)5.Doublebuffering在动画上常因有repaint的需要,而产生了闪烁(flick)的现象。为了解决这个问题,可先将图画暂时绘制于另一个屏幕表面看不到的画布上(例如一个Canvas,或Panel),然后等绘制完毕再一次显示出来。这样就比较不会有闪烁现象。此称为Doublebuffering。AWT的组件常需要做这类的处理,但Swing的组件就不用。Jcomponet有一方法来设置Swing的DoubleBuffer状态:voidsetDoubleBuffered(booleanaFlag)基本上,Swing组件的默认值为true。,108,JMenuBar、JMenu、JMenuItem,JMenuBar(菜单栏)是在窗口下的菜单。这种菜单可以放在所有实现RootPaneContainer的容器里。而其里面可有多个菜单(JMenu),菜单中有选项(JMenuItem)。选项间有分隔线(Seperator)。选项也可加入Icon,选项也可以是JradioButtonMenuItem,也可以是JcheckBoxMenuItem。,109,JOptionPane,JOptionPane提供了多样化的选择对话框。样式及功能比JDialog更美观强大。其典型的画面呈现方式如下:,110,首先我们来看其构造函数:JOptionPane(Objectmessage,intmessageType,intoptionType,Iconicon,Objectoptions,ObjectinitialValue)這是功能最多的一个Objectmessage表示Joptionpane所显示出来的信息可以是一种Objcet类型的对象。Object是所有类的源头类,也就是说,所有类型的对象都可放在上面呈现出来。intmessageType信息类型,计有下列几种ERROR_MESSAGEINFORMATION_MESSAGEWARNING_MESSAGEQUESTION_MESSAGEPLAIN_MESSAGEintoptionType选项类型DEFAULT_OPTIONYES_NO_OPTIONYES_NO_CANCEL_OPTIONOK_CANCEL_OPTIONObjectoptions选项是一种数组类型ObjectinitialValue默认初始值,111,JOptionPaneExample,10种JoptionPane所产生的对话窗口。,112,先用构造函数产生一个JOptionPaneJOptionPaneoptionPane=newJOptionPane(newJLabel(这是一个用OptionPane产生的对话窗口),/messageJOptionPane.INFORMATION_MESSAGE);/messageType再用optionPane.createDialog()的方式产生一个属于此JoptionPane的Dialog,然后使此Dialog显示出来。JDialogdialog=optionPane.createDialog(this.getContentPane(),Option-Dialog);dialog.setVisible(true);,113,JOptionPane.showMessageDialog(JOptionPane.ERROR_MESSAGE)JOptionPane.showInternalMessageDialog(JOptionPane.ERROR_MESSAGE),114,JOptionPane.showConfirmDialog(JOptionPane.QUESTION_MESSAGE);,JOptionPane.showInternalConfirmDialog(JOptionPane.QUESTION_MESSAGE);,115,输入对话框可有选项值,并用指定的Icon:ObjectpossibleValues=EpsonStylusColor600,HPDJ1600C,CanonLBP2460;Strings=(String)JOptionPane.showInputDialog(jButton10,请选择欲使用的打印机,选项对话框,JOptionPane.INFORMATION_MESSAGE,newImageIcon(printer.gif),possibleValues,possibleValues0);,116,OptionDialog,选项按钮也可以改成中文!ObjectbtnObjects=newObject确定,applyBtn,Cancel,;intvalue=JOptionPane.showOptionDialog(btnObjects,/optionsapplyBtn);/initialValue,117,面板(JPanel),一种中间容器,用来组成其它组件可以添加各种组件(包括面板组件)面板(JPanel)的大小由它所包含的组件决定当组件个数增加,面板(JPanel)也会随之而增大,118,JPanel,JPanel是一种最常使用的中间层容器,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政管理经济法专注考点试题及答案
- 市政工程考试趋势与未来展望及试题及答案
- 行政管理与经济法教育试题及答案
- 酒店管理服务培训合作协议
- 物流管理与供应链知识测试卷
- 通信技术与网络应用知识考点
- 行政管理经济法热点追踪试题及答案汇编
- 经济师学术与实务结合试题及答案
- 优化药品使用管理的工作思路计划
- 宿舍门标设计
- 心脏骤停和心源性猝死诊疗规范诊疗指南
- 建筑智能化弱电系统建设项目设计方案建筑施工
- 航道治理工程施工组织设计
- 马工程教材《公共财政概论》PPT-第四章 政府消费支出
- GB/T 29531-2013泵的振动测量与评价方法
- GA/T 832-2014道路交通安全违法行为图像取证技术规范
- 博士生招生面试评分表
- SWOT分析法很全面课件
- 膀胱造瘘的护理课件
- 消防应急疏散演练人员签到表(标准通用版)
- 陕旅版五年级英语上册句型词汇知识点总结
评论
0/150
提交评论