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

下载本文档

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

文档简介

图形用户界面第一页,共六十一页,2022年,8月28日6.1GUI编程基础图形用户界面(GUI)使用户可以和程序进行可视化交互。无论是程序的设计者还是使用者都可以通过图形用户界面明显“看到”和“感觉”到程序的存在。图形用户界面为不同的应用程序提供了感觉上一致的用户界面组件,这样使用户在记住执行功能的复杂命令上花费较少的时间,而花更多的时间通过有效的方式来使用程序。一个设计良好的软件通常包括业务层的逻辑设计和表现层的用户界面设计两大部分。因此,好的用户界面设计对一个系统的成功是至关重要的。一个使用起来困难的界面,轻者会造成用户操作不便;重者引起用户反感,不管系统的功能如何而拒绝使用该软件系统。如果信息的表达方式是混乱的或是容易误解的,那么用户可能会误解信息的涵义。他们进行的一系列操作就有可能破坏数据,甚至导致灾难性的系统失败。

第二页,共六十一页,2022年,8月28日6.1.1图形用户界面计算机操作界面的发展从单调的命令行形式到图形化窗口形式,逐步形成了现在计算机用户认可的图形用户界面主要特征,主要集中在窗口、图标、菜单、指点、图形等方面。用户界面设计的一般性原则包括:用户熟悉、一致性、意外最小化、可恢复性、用户指南、用户差异性等。图形用户界面包含了许多独立的显示元素,供用户交互。它们由程序中的GUI组件组成。GUI组件是用户通过键盘或鼠标进行交互的对象,菜单、按钮、文本域、标签和下拉列表框等GUI组件是图形用户界面的常用部分。第三页,共六十一页,2022年,8月28日AWT和Swing1.AWT AWT(AbstractWindowToolkit)是一个独立平台的窗口工具组件集,它依赖于对等组件(Peer),而对等组件是一个本地GUI组件,由AWT类管理。AWT的作用是给用户提供基本的界面组件,如按钮、列表框、菜单等。

AWT最初只包括与本地对等组件相关联的组件,称为重量组件(HeavyweightComponent),这些组件在它们自己的本地不透明窗口中绘制,在改变其默认行为时,不可以为其扩展子类,此外,它们必须是矩形的,且不能有透明背景。第四页,共六十一页,2022年,8月28日2.SwingSwing是建立在AWT基础之上的,它利用了AWT的底层组件,包括图形、颜色、字体、工具包和布局管理器等。使用AWT最好的部分来建立一个新的轻量组件集,而丢弃了AWT中有问题的重量组件部分。 通过引入新特性和丰富的功能,Swing提供了比AWT更全面的组件集合。SwingAPI是围绕实现AWT各个部分的API构建的,这保证了所有早期的AWT组件仍然可以使用。第五页,共六十一页,2022年,8月28日11.2常用组件(AWT)java.awt中的各个类

java.lang.ObjectColor颜色Font字体Component组件BorderLayout,FlowLayoutCardLayout,GridBagLayout布局类CheckboxGroup复选框组Image图象AWTEvent事件MenuComponent菜单组件Graphics图形第六页,共六十一页,2022年,8月28日图形组件类的继承关系ObjectComponentButtonCanvasChoiceCheckboxLabelListScrollbarTextComponentContainerWindowPaneScrollPaneDialogFileDialogFrameTextAreaTextField第七页,共六十一页,2022年,8月28日6.1.2Swing和ATWJava类库中的ATW和Swing包提供了大量的可视化组件,AWT组件是建立在对等模型的基础上的重量级组件;而Swing组件则是用纯Java编写的轻量级组件。Swing带来了以下优势:更丰富、更方便的用户界面元素集。对底层平台的依赖更少,因此和平台有关的bug也少得多。给不同平台上的用户一致的感觉。AWT与Swing的结构关系以及Swing的组件关系第八页,共六十一页,2022年,8月28日6.1.3窗体容器窗体(也叫Windows)是显示在用户终端桌面上的图形元素。窗体可以充当各种组件和控件的一个容器。Java中的窗体类容器可能是一个对话框(Dialog)、框架(Frame)或者是一个面板(Panel)等。Java中的主要窗体类容器如下:JApplet通过启用Java的Web浏览器或其他Apple查看器运行的程序。JDialog汇集用户输入的模式或无模式窗口。JFrame顶层应用程序窗口。JPanel容纳部分界面的小型容器。反过来,该容器又可用于其他任何容器中,如JFrame、JPanel、JApplet或JDialog组件。AWT窗体基于AWT的可视窗体。AWT窗体包括Applet、对话框、框架和面板。AWT与Swing的结构关系以及Swing的组件关系第九页,共六十一页,2022年,8月28日6.1.3窗体容器框架(JFrame)是—种常用的顶层容器。框架的内部结构比较复杂,它可以划分为4种窗格:根窗格(RootPane)、布局窗格(LayeredPane)、内容窗格(ContentPane)和玻璃窗格(GlassPane)。对JFrame添加组件有两种方式:1、用getContentPane方法获得JFrame的内容窗格,再对其加入组件;2、建立一个JPanel之类的中间容器,把组件添加到容器中,用setContentPane方法把该容器置为JFrame的内容窗格。面板(JPanel)有一个能够在上面进行绘制的表面,而且其本身也是容器。因此,它除了可以绘制图形、文字,还能容纳按钮、滑动条等其他用户界面元素。TitleJFrameMenuRootPaneLayeredPaneContentPaneClassPaneMenuBar1、用getContentPane方法获得JFrame的内容窗格,再对其加入组件:frame.getContentPane().add(childComponent);2、建立一个JPanel之类的中间容器,把组件添加到容器中,用setContentPane方法把该容器置为JFrame的内容窗格:JPanelcontentPane=newJPanel();……//把其它组件添加到JPanel中;frame.setContentPane(contentPane);//把contentPane对象设置成为frame的内容窗格第十页,共六十一页,2022年,8月28日创建一个简单的JFrame主窗体importjavax.swing.*;importjava.awt.*;publicclassSimpleFrameextendsJFrame{

publicSimpleFrame(intwidth,intheight){setSize(width,height);setTitle("Frame主窗体");Toolkitkit=Toolkit.getDefaultToolkit();DimensionscreenSize=kit.getScreenSize();//获取当前屏幕的尺寸

intx=(screenSize.width-width)/2;inty=(screenSize.height-height)/2;setLocation(x,y);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicstaticvoidmain(Stringargs[]){SimpleFrameframe=newSimpleFrame(400,300);frame.setVisible(true);}}第十一页,共六十一页,2022年,8月28日为了在面板中绘制文字,我们需要定义一个扩展JPanel的新派生类,并覆盖paintComponent方法。paintComponent方法实际上定义在JComponent中,这个类是所有非窗口swing组件的基类。该方法有一个Graphics类型的参数。Graphics对象存储了一个用于绘制图形和文本的设计集合,包括字体和颜色等。JAVA中的所有绘制都必须使用Graphics对象。它拥有绘制图案,图象和文本的方法。不管什么原因导致窗口需要重新绘制,事件处理器都会通知组件。它会引起所有组件的paintComponent方法执行。这就是说,该方法会自动调用,我们不必干涉这个自动过程。导致窗口重新绘制,引发paintComponent方法的原因很多,例如:用户缩放窗口,窗口被遮盖,窗口重新显示等第十二页,共六十一页,2022年,8月28日

如何向面板添加内容并置于框架中importjava.awt.*;importjava.io.*;importjavax.swing.*;importjavax.imageio.*;import.*;publicclassPanelFrameextendsSimpleFrame{/**CreatesanewinstanceofPanelFrame*/publicPanelFrame(intwidth,intheight){super(width,height);}publicstaticvoidmain(Stringargs[]){

PanelFrameframe=newPanelFrame(300,200);ContentPanelcontentPanel=newContentPanel();//把其它组件添加到面板中;contentPanel.add(newJButton("OK"));frame.setContentPane(contentPanel);frame.setVisible(true);}}classContentPanelextendsJPanel{//在面板中绘制图文;publicvoidpaintComponent(Graphicsg){super.paintComponent(g);g.drawOval(120,60,150,70);//绘制一个椭圆

try{g.drawString("这是一个面板!",160,100);//绘制一行文字

Imageimage=ImageIO.read(newURL(urlname));g.drawImage(image,30,30,null);//绘制一幅图片

}catch(IOExceptione){g.drawString("加载图形失败!",100,100);}}Stringurlname="/HTML/IMAGE/stamp_yi.JPG";}第十三页,共六十一页,2022年,8月28日

是AWT窗口组件中最基本的组件,它实际上是Frame与Dialog组件的超类。窗口组件没有边界、标题栏与菜单栏,而且大小不可以调整。常用窗口实现的界面包括:产品信息的封面(如Outlook等软件启动时,显示在屏幕中间且几秒后自动消失的封面窗口),提示帮助信息(如使用金山词霸等软件时,移动鼠标到某个英文单词上时自动弹出的解释信息)等。

AWT窗体组件第十四页,共六十一页,2022年,8月28日例FrameDemo.javaimportjava.awt.*;publicclassSplashDemoextendsFrame{Windowwindow; publicstaticvoidmain(String[]args) {SplashDemoframe=newSplashDemo(); } publicSplashDemo() { window=newWindow(this);下面我们通过一个例子来学习如何使用窗口类:第十五页,共六十一页,2022年,8月28日

DimensionscmSize=Toolkit.getDefaultToolkit().getScreenSize(); intwidth=300; intheight=200; window.setLocation(scmSize.width/2-(width/2),scmSize.height/2-(height/2)); window.setSize(width,height); window.show(); 续1第十六页,共六十一页,2022年,8月28日window.toFront(); try{Thread.currentThread().sleep(3000);} catch(Exceptione){e.printStackTrace();} window.dispose(); System.exit(0);}}

这是个使用Window的窗口在屏幕上显示一个矩形窗口类的实例,这个窗口没有边界、标题栏与菜单栏,在屏幕上停留3秒后自动消失。如果在窗口中加载一幅图片,则能实现一个类似Outlook的封面窗口(在窗口中加载图片的方法我们将在第9章中学习)。续2第十七页,共六十一页,2022年,8月28日程序中用到了工具类的方法Toolkit.getDefaultToolkit().getScreenSize()。Toolkit类是一个包含许多有用的本地工具方法的类。getScreenSize()方法的作用是取得显示器的像素尺寸。程序的运行结果如图所示。续3第十八页,共六十一页,2022年,8月28日续4第十九页,共六十一页,2022年,8月28日

是Window的一个子类,它是带有标题栏和边界的窗口,而且允许调整大小。另外,用户还可以为框架附加一个菜单栏。用户在程序设计过程中,当程序窗口需要图表化或者需要包含菜单栏时,则可以选择使用框架组件。构造一个框架后,可以用add()方法来给框架添加组件。框架的缺省布局管理器属性是BorderLayout。可以用setLayout()方式来改变布局管理器属性。框架(Frame)第二十页,共六十一页,2022年,8月28日

框架类中的Frame(String)构造方法创建一个由String规定标题的新的不可见的框架对象。例FrameDemo.javaimportjava.awt.*;publicclassFrameDemoextendsFrame{ publicFrameDemo(Stringtitle) {super(title);} publicstaticvoidmain(Stringagrs[]){ FrameDemoframe=newFrameDemo("DemoFrame");续1第二十一页,共六十一页,2022年,8月28日

frame.setLocation(100,100); frame.setSize(500,200); frame.setVisible(true); }}

程序的运行结果如图所示,它是一个具有标题、大小及背景颜色的框架。续2第二十二页,共六十一页,2022年,8月28日图续3第二十三页,共六十一页,2022年,8月28日

也是Window的扩展类。与框架相同的是,对话框也拥有边界与标题栏,而且也可以调整大小;而与框架不同的是,对话框不支持附加菜单栏,而且对话框可以模式化属性设置,这是窗口和框架都不允许的。因此,如果用户在程序设计过程中需要创建一个临时窗口与用户交换信息时,使用模式对话框是最方便的。另外,AWT中还提供了Dialog类的一个常用的扩展类——FileDialog(文件对话框)。它可以为用户选择一个待打开或保存的文件。对话框(Dialog)第二十四页,共六十一页,2022年,8月28日

可以说对话框是介于窗口和框架之间的,对话框和框架相比各有特色。我们来看一个典型的对话框的例子。例DialogDemo.javaimportjava.awt.*;publicclassDialogDemo{ publicstaticvoidmain(Stringagrs[]){ Frameframe=newFrame();续1第二十五页,共六十一页,2022年,8月28日Dialogdialog=newDialog(frame,"DemoDialog",false); dialog.setLocation(100,100); dialog.setSize(500,100);dialog.setVisible(true); }}程序运行结果如下图所示。续2第二十六页,共六十一页,2022年,8月28日续3第二十七页,共六十一页,2022年,8月28日

文件对话框是文件选择设备的一个实现。它有自己的自由窗口以及窗口元素,并且允许用户浏览文件系统,以及为以后的操作选择一个特定的文件。例如:例FileDialogDemo.javaimportjava.awt.*;publicclassFileDialogDemo{ publicstaticvoidmain(String[]args) { FrameparentFrame=newFrame();续4第二十八页,共六十一页,2022年,8月28日FileDialogd=newFileDialog(parentFrame,"FileDialog"); d.setVisible(true);//blockhereuntilOKselected Stringfname=d.getFile(); }}程序的运行结果如下图所示。

续5第二十九页,共六十一页,2022年,8月28日图8.5续6第三十页,共六十一页,2022年,8月28日

通常情况下,并不需要处理FileDialog的事件。上例中,调用setVisible(true)将阻塞事件,直至用户选择OK,这时,对话框会请求用户选择文件名,这个信息将作为一个String类型返回。续7第三十一页,共六十一页,2022年,8月28日6.2图形与绘图 在Java中用于绘制文字、图形、图像的是Graphics类,并通过图形组件的paintComponent方法实现绘制工作。我们通常把Graphics称为与Swing组件关联的图形上下文(graphiccontext),因为它包含了各种绘图的方法。Graphics是抽象类,不能直接创建Graphics对象,只能通过JPanel或JComponent的派生类得到一个Graphics对象。

第三十二页,共六十一页,2022年,8月28日6.2.1坐标系统图形上下文使用一个简单的坐标系统,这个坐标系统中的每个图形元素(像素)用x和y的坐标来表示。坐标系统的原点,其坐标为(0,0),位于组件的左上角。x坐标表示一个点与原点的水平距离,y坐标表示一个点与原点的垂直距离。x坐标从左到右增大,y坐标从上到下增大

x轴y轴(x,y)(0,0)(1,0)(2,0)(0,1)(0,2)(1,1)width宽height高原点(坐标单位:像素)第三十三页,共六十一页,2022年,8月28日ColorredColor=newColor(255,0,0);//红色ColorredColor=Color.RED;//红色6.2.2颜色Java中有专门处理颜色的类Color。Java的颜色是根据RGB值来建立的。RGB值是用于指定红色、绿色和蓝色这3个分量的数字组合,三基色混合在一起形成了最终的颜色。Color对象可以由代表红色、绿色和蓝色的3个单独的RGB值创建,RGB取值范围为0到255之间的整数。

Color类还定义了一些标准的颜色,作为类常量使用。这些颜色可以用来直接定义新的Color对象

第三十四页,共六十一页,2022年,8月28日6.2.3绘图画线drawLine(int

x1,int

y1,int

x2,int

y2)该方法将用当前的颜色以(x1,y1)为起点,(x2,y2)为终点画一条直线。画矩形voiddrawRect(intx,inty,intwidth,intheight)voidfillRect(intx,inty,intwidth,intheight)drawRect方法和fillRect方法分别可以用来绘制一个矩形的轮廓和一个被填充的矩形。矩形的左上角在(x,y),矩形的大小由参数width和height来确定画椭圆和圆voiddrawOval(intx,inty,intwidth,intheight)voidfillOval(intx,inty,intwidth,intheight)用drawOval方法可以绘制一个椭圆。而用fillOval方法可以填充一个椭圆。椭圆被绘制在一个矩形范围内,这个矩形的左上角是(x,y),而大小由参数width和height确定。绘制圆形时,我们只需指定矩形为一个正方形。画圆弧voiddrawArc(intx,inty,intwidth,intheight,intstartAngle,intsweepAngle)voidfillArc(intx,inty,intwidth,intheight,intstartAngle,intsweepAngle)圆弧被绘制在一个矩形范围内,这个矩形的左上角是(x,y)点,而大小由参数width和height确定。圆弧是以startAngle为开始的角度,sweepAngle为转过的角度而绘制的。这些角是以度为单位的。画多边形voiddrawPolygon(intx[],inty[],intnumPoints)voidfillPolygon(intx[],inty[],intnumPoints)x轴y轴(x+d/4,y+d/2)(0,0)(x,y)widthheight原点(坐标单位:像素)dd/2(x+d/2,y+d/4)(x,y+d/4)(x+d*3/4,y+d/2)importjavax.swing.*;importjava.awt.*;publicclassDaoextendsJFrame{publicDao(){setSize(width,height);//设置框架大小setTitle("道");//设置框架标题//将框架显示在屏幕正中Toolkitkit=Toolkit.getDefaultToolkit();DimensionscreenSize=kit.getScreenSize();intx=(screenSize.width-width)/2;inty=(screenSize.height-height)/2;setLocation(x,y);//设置框架位置setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}

publicstaticvoidmain(Stringargs[]){Daoframe=newDao();DrawPaneldrawPanel=newDrawPanel();//把其它组件添加到面板中;frame.setContentPane(drawPanel);frame.setVisible(true);}intwidth=400;intheight=300;}classDrawPanelextendsJPanel{publicDrawPanel(){setBackground(Color.GRAY);}//在面板中绘制太极图形;publicvoidpaintComponent(Graphicsg){super.paintComponent(g);g.setColor(Color.BLACK);g.fillArc(x,y,d,d,0,180);g.setColor(Color.WHITE);g.fillArc(x,y,d,d,180,180);g.setColor(Color.BLACK);g.fillArc(x+d/2,y+d/4,d/2,d/2,180,180);g.setColor(Color.WHITE);g.fillArc(x,y+d/4,d/2,d/2,0,180);g.fillOval(x+d*3/4-5,y+d/2-5,10,10);g.setColor(Color.BLACK);g.fillOval(x+d/4-5,y+d/2-5,10,10);}

intx=100;inty=40;intd=200;}绘制太极图的程序Dao.java第三十五页,共六十一页,2022年,8月28日第三十六页,共六十一页,2022年,8月28日6.3事件处理模型事件是由程序检测到的行为和动作。在一个应用程序中,程序员通常无法预测用户下一个将要执行的动作。用户可能会选择一个菜单项,单击一个按钮或者文本框。为了解决这个问题,程序员可以编写代码来处理感兴趣的事件,而不是编写那些全都按照一定顺序执行的代码。许多流行的应用程序之所以称为是事件驱动的,是因为它们是为响应事件而设计的。第三十七页,共六十一页,2022年,8月28日6.3.1事件和Java事件模型图形用户界面是事件驱动的。事件是由程序检测到的行为和动作。导致该事件发生的对象称为事件源。事件处理程序是处理事件和执行任务的方法,它与所触发的事件关联。Java事件处理模型一般包括用户事件和系统事件。Java事件模型是一种“源-监听器”模型。事件监听器是一个实现了专门的监听器接口的对象,而事件源是一个能注册监听器,并向他们发送事件的对象。当事件源产生某个事件时,它会向注册在那个事件上的所有监听器发送事件通知,以便执行相应的事件处理程序。第三十八页,共六十一页,2022年,8月28日6.3.2事件处理实例分析一个Java事件处理模型的具体步骤如下:创建事件监听器注册事件监听器创建事件对象通知事件发生执行事件处理程序panel:ColorPanelActionEventColorActionListenercolorButtonactionPerformed()setColor()12addActionListener()345容器事件源监听器privateclassColorActionListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){setColor();}}……colorButton.addActionListener(newColorActionListener());第三十九页,共六十一页,2022年,8月28日引入事件处理机制后的编程基本方法如下:①对java.awt中组件实现事件处理必须使用包,所以在程序开始应加入importjava.awt.event.*语句。②用如下语句设置事件监听者:事件源.addXXListener(XXListener代表某种事件监听者)。③事件监听者所对应的类实现事件所对应的接口XXListener,并重写接口中的全部方法。这样就可以处理图形用户界面中的对应事件了。要删除事件监听者可以使用语句:事件源.removeXXListener;第四十页,共六十一页,2022年,8月28日事件处理实例分析简单的GUI应用程序ButtonFrame第四十一页,共六十一页,2022年,8月28日importjava.awt.*;importjava.io.PrintStream;importjava.awt.event.*;importjavax.swing.*;publicclassButtonFrameextendsSimpleFrame{publicButtonFrame(intwidth,intheight){super(width,height);setTitle("演示按钮事件");ColorPanelpanel=newColorPanel();ContainercontentPane=getContentPane();contentPane.add(panel);}

publicstaticvoidmain(String[]args){//设置程序观感

try{UIManager.setLookAndFeel(windows);}catch(Exceptione){System.err.println("程序异常:"+e.getMessage());}ButtonFrameframe=newButtonFrame(400,300);frame.setVisible(true);}//可用于Windows平台的观感常量

privatestaticfinalStringmetal="javax.swing.plaf.metal.MetalLookAndFeel";privatestaticfinalStringmotif="com.sun.java.swing.plaf.motif.MotifLookAndFeel";privatestaticfinalStringwindows="com.sun.java.swing.plaf.windows.WindowsLookAndFeel";

}第四十二页,共六十一页,2022年,8月28日classColorPanelextendsJPanel{publicColorPanel(){//创建组件

colorButton=newJButton("随机颜色");darkerButton=newJButton("颜色变暗");brighterButton=newJButton("颜色变亮");colorText=newJTextArea(10,30);//添加组件

add(newJScrollPane(colorText));add(colorButton);add(darkerButton);add(brighterButton);//注册组件监听事件

colorButton.addActionListener(newColorActionListener());brighterButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){setBrighter();}});

darkerButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){setDarker();}});}

privatevoidsetBrighter(){backgroundColor=backgroundColor.brighter();changeColor();}

privatevoidsetDarker(){backgroundColor=backgroundColor.darker();changeColor();}

privateclassColorActionListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){setColor();//设置面板颜色

}}

privatevoidchangeColor(){intr=backgroundColor.getRed();intg=backgroundColor.getGreen();intb=backgroundColor.getBlue();colorText.append("颜色值:\tR="+r+"\tG="+g+"\tB="+b+"\n");setBackground(backgroundColor);}

privatevoidsetColor(){//产生随机颜色

intr=(int)(Math.random()*255);intg=(int)(Math.random()*255);intb=(int)(Math.random()*255);colorText.append("颜色值:\tR="+r+"\tG="+g+"\tB="+b+"\n");backgroundColor=newColor(r,g,b);setBackground(backgroundColor);}

privateColorbackgroundColor;privateJButtoncolorButton;privateJButtondarkerButton;privateJButtonbrighterButton;privateJTextAreacolorText;}第四十三页,共六十一页,2022年,8月28日例按钮单击事件的处理方法。importjava.awt.*;importjava.applet.*;importjava.awt.event.*;publicclassActionListenerDemoextendsAppletimplementsActionListener{ Buttonb=newButton("PressMe"); publicvoidinit(){ add(b); //设置按钮b的监听者

b.addActionListener(this); } //实现ActionListener接口所定义的方法actionPerformed publicvoidactionPerformed(ActionEvente){ showStatus("ButtonClicked"); }}

Java事件处理概述__例第四十四页,共六十一页,2022年,8月28日

Java事件处理概述__例运行结果

第四十五页,共六十一页,2022年,8月28日

Java常用事件__列表第四十六页,共六十一页,2022年,8月28日例选择事件的处理。importjava.applet.Applet;importjava.awt.*;importjava.awt.event.*; publicclassItemListenerDemoextendsAppletimplementsItemListener{ TextAreata=newTextArea(6,30); String[]city={"北京","上海","天津","济南","青岛"}; Checkboxcb[]=newCheckbox[5]; publicvoidinit(){ add(newLabel("你选择的城市是:")); add(ta); add(newLabel("请选择你喜爱的城市:")); for(inti=0;i<5;i++){ cb[i]=newCheckbox(city[i]); add(cb[i]); cb[i].addItemListener(this); }} publicvoiditemStateChanged(ItemEvente){ ta.append(e.getItem()+"\t");}}

Java常用事件__例第四十七页,共六十一页,2022年,8月28日

Java常用事件__例结果第四十八页,共六十一页,2022年,8月28日例鼠标事件及鼠标移动事件的处理。importjava.applet.Applet;importjava.awt.*;importjava.awt.event.*; publicclassMouseEventDemoextendsAppletimplementsMouseListener,MouseMotionListener{ intx1,y1,x2,y2; publicvoidinit(){addMouseListener(this); addMouseMotionListener(this); } publicvoidpaint(Graphicsg){ g.drawLine(x1,y1,x2,y2); } publicvoidmousePressed(MouseEvente){ x1=e.getX(); y1=e.getY();} publicvoidmouseClicked(MouseEvente){} publicvoidmouseEntered(MouseEvente){} publicvoidmouseExited(MouseEvente){} publicvoidmouseReleased(MouseEvente){} publicvoidmouseDragged(MouseEvente){ x2=e.getX(); y2=e.getY(); repaint(); } publicvoidmouseMoved(MouseEvente){}}

Java常用事件__例第四十九页,共六十一页,2022年,8月28日

Java常用事件__例结果第五十页,共六十一页,2022年,8月28日事件适配器 为了方便,Java为那些声明了多个方法的Listener接口提供了一个对应的适配器(Adapter)类,在该类中实现了对应接口的所有方法,只是方法体为空。 在创建新类时,可以不实现接口,而是只继承某个适当的适配器,并且仅覆盖所关心的事件处理方法即可。 接口及对应的适配器类如下所示:第五十一页,共六十一页,2022年,8月28日例通过适配器来创建一个可关闭的窗口。importjava.applet.Applet;importjava.awt.*;importjava.awt.event.*;publicclassWindowAdapterDemoextendsFrame{ publicWindowAdapterDemo(){ super("可关闭的窗口"); setSize(300,200); setVisible(true); addWindowListener(newWinAdapter()); } publicstaticvoidmain(String[]args){ newWindowAdapterDemo(); } classWinAdapterextendsWindowAdapter{ publicvoidwindowClosing(WindowEvente){ System.exit(0); }}}事件适配器__例第五十二页,共六十一页,2022年,8月28日事件适配器__例14.4运行结果第五十三页,共六十一页,2022年,8月28日6.3.3内部类在一个类内部声明的类称为内部类。没有为其取名建立

温馨提示

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

评论

0/150

提交评论