Java语言程序设计(第三版清华)7、8章.ppt

上传人:max****ui 文档编号:11496902 上传时间:2020-04-25 格式:PPT 页数:213 大小:1.56MB
返回 下载 相关 举报
Java语言程序设计(第三版清华)7、8章.ppt_第1页
第1页 / 共213页
Java语言程序设计(第三版清华)7、8章.ppt_第2页
第2页 / 共213页
Java语言程序设计(第三版清华)7、8章.ppt_第3页
第3页 / 共213页
点击查看更多>>
资源描述
1,第9章图形用户界面,-Java2实用教程7、8章,JAVA语言程序设计,2,目录,9.1Applet概述9.2Applet应用程序接口9.3绘图9.4Swing基础9.5Swing的特点和概念9.6Swing组件9.7其它Swing特性9.8本章小结(说明:本章部分例题出自java_tutorial_sun),被浏览器加载和执行,被浏览器加载和执行,4,9.1Applet概述,JavaApplet一种嵌入HTML文档中的Java程序与Application相比,Applet具有明显的优点web浏览器提供了运行Applet所需要的许多功能Applet是在运行时通过网络从服务器端下载的,因而便于软件的发布和及时更新Applet也有其局限性,不能在客户机上读写当地文件也不能连接除它所在的服务器以外的其它机器,5,在浏览器中加载一个Applet,功能是显示一个字符串“ThisisaJavaApplet!”importjava.awt.Graphics;importjavax.swing.JApplet;publicclassEx9_1extendsJAppletpublicvoidpaint(Graphicsg)/重载JApplet类的paint方法/参数是Graphics类的对象,是由浏览器传递过来的super.paint(g);/调用其超类JApplet类的paint方法g.drawString(ThisisaJavaApplet!,25,25);,9.1Applet概述(续)例9_1,Applet概述,6,在NetBeansIDE中运行,9.1Applet概述(续)例9_1运行结果,Applet概述,7,编译ex9_1.java产生字节码文件ex9_1.class。接下来就需要编写一个HTML文件ex9_1.html来嵌入ex9_1.class将ex9_1.html文件和Ex9_1.class文件放在同一个目录下。现在,在浏览器中打开这个HTML文件,当浏览器遇到Applet标记时,就会自动载入指定的class文件,就会实现在屏幕上绘制一串字符的效果,9.1Applet概述(续)例9_1运行结果,Applet概述,8,9.2Applet应用程序接口,JApplet类一个applet程序需要继承javax.swing包中的JApplet类,也可以继承老的AWT组件中的Applet类,JApplet类属于新的Swing组件提供了applet在浏览器中运行需要具备的特定方法浏览器载入时,要依次运行init、start、paint方法离开浏览器页面时,执行stop退出浏览器时,执行destroy提供了所有这些方法的默认实现,所以我们在编写自己的applet时,就可以不必写出全部方法,只要继承这个JApplet,然后重写特定的方法来增加特殊功能,9,9.2Applet应用程序接口,Applet应用程序接口,10,9.2Applet应用程序接口(续),Applet应用程序接口,11,轻量级组件:是用JAVA代码画出来的,这样具有平台移植性它使用AWT最好的部分来建立一个新的轻量组件集,而丢弃了AWT中有问题的重量组件部分(除JFrame,JDialog,JApplet,JInternalFrame,JWindow外)Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级组件,没有本地代码,不依赖操作系统的支持,因此Swing在不同的平台上表现一致重量级组件:是调用操作系统的函数画出来的组件,比如主窗体。java.awt里面的是重量级的受平台影响,12,repaint()执行:update()方法,先刷新屏幕(以背景填充),再调用paint()方法重画。一般可以重载update()和paint()方法,13,importjavax.swing.*;.importjava.awt.*;publicclassHelloSwingAppletextendsJAppletpublicvoidinit()JLabellabel=newJLabel(YouaresuccessfullyrunningaSwingapplet!);label.setHorizontalAlignment(JLabel.CENTER);label.setBorder(BorderFactory.createMatteBorder(1,1,2,2,Color.black);getContentPane().add(label,BorderLayout.CENTER);,9.2Applet应用程序接口(续)HelloSwingApplet.java,Applet应用程序接口,14,9.3绘图,图形环境和图形对象颜色和字体使用Graphics类绘图使用Graphics2D类绘图,15,9.3.1图形环境和图形对象,坐标GUI组件的左上角坐标默认为(0,0)从左上角到右下角,水平坐标x和垂直坐标y增加。坐标的单位是象素Graphics对象Graphics对象是专门管理图形环境的。Graphics类是一个抽象类设计一个抽象类Graphics可以给程序员提供一个与平台无关的绘图接口,因而程序员就可以以独立于平台的方式来使用图形。在各个平台上实现的Java系统将创建Graphics类的一个子类,来实现绘图功能,但是这个子类对程序员是透明的,也就是说我们只能看得到Graphics类,却不必关心其实现在执行paint方法时,系统会传递一个指向特定平台的Graphics子类的图形对象g,绘图,16,9.3.2颜色和字体,Java中有关颜色的类是Color类,它在java.awt包中,这个类声明了用于操作Java程序中颜色的方法和常量,绘图,17,9.3.2颜色和字体,Font类有关字体控制,在java.awt包中,绘图,18,9.3.3使用Graphics类绘图,Graphics类其对象可以绘制文本、线条、矩形、多边形、椭圆、弧等多种图形,绘图,21,用各种颜色绘制文字及各种图形importjava.awt.*;importjavax.swing.*;publicclassEx9_2extendsJFramepublicEx9_2()super(“演示字体、颜色、绘图”);/调用基类构造方法setSize(480,250);/设置窗口大小setVisible(true);/显示窗口publicvoidpaint(Graphicsg)super.paint(g);/callsuperclassspaintmethodg.setFont(newFont(SansSerif,Font.BOLD,12);g.setColor(Color.blue);/设置颜色g.drawString(字体ScanSerif,粗体,12号,蓝色,20,50);,9.3.3使用Graphics类绘图(续)Ex9_2.java,绘图,22,g.setFont(newFont(Serif,Font.ITALIC,14);g.setColor(newColor(255,0,0);g.drawString(字体Serif,斜体,14号,红色,250,50);g.drawLine(20,60,460,60);/绘制直线g.setColor(Color.green);g.drawRect(20,70,100,50);/绘制空心矩形g.fillRect(130,70,100,50);/绘制实心矩形g.setColor(Color.yellow);g.drawRoundRect(240,70,100,50,50,50);/绘制空心圆角矩形g.fillRoundRect(350,70,100,50,50,50);/绘制实心圆角矩形g.setColor(Color.cyan);g.draw3DRect(20,130,100,50,true);/绘制突起效果空心矩形g.fill3DRect(130,130,100,50,false);/绘制凹陷效果实心矩形,9.3.3使用Graphics类绘图(续)Ex9_2.java,绘图,23,g.setColor(Color.pink);g.drawOval(240,130,100,50);/绘制空心椭圆g.fillOval(350,130,100,50);/绘制实心椭圆g.setColor(newColor(0,120,20);g.drawArc(20,190,100,50,0,90);/绘制一段圆弧g.fillArc(130,190,100,50,0,90);/绘制扇形g.setColor(Color.black);intxValues=250,280,290,300,330,310,320,290,260,270;intyValues=210,210,190,210,210,220,230,220,230,220;g.drawPolygon(xValues,yValues,10);/绘制空心多边形intxValues2=360,390,400,410,440,420,430,400,370,380;g.fillPolygon(xValues2,yValues,10);/绘制实心多边形,9.3.3使用Graphics类绘图(续)Ex9_2.java,绘图,24,publicstaticvoidmain(Stringargs)JFrame.setDefaultLookAndFeelDecorated(true);/设置窗口的外观感觉为Java默认Ex9_2application=newEx9_2();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);运行结果,9.3.3使用Graphics类绘图(续)Ex9_2.java运行结果,绘图,25,9.3.4使用Graphics2D类绘图,Java2DAPI提供了高级的二维图形功能分布在java.awt、java.awt.image、java.awt.color、java.awt.font、java.awt.geom、java.awt.print和java.awt.image.renderable包中它能轻松使你完成以下功能:绘制任何宽度的直线用渐变颜色和纹理来填充图形平移、旋转、伸缩、切变二维图形,对图像进行模糊、锐化等操作构建重叠的文本和图形,绘图,26,Graphics2D类要想使用Java2DAPI,就必须通过一个该类的对象Graphics2D类是Graphics类的抽象子类要访问Graphics2D功能,必须使用如下语句将传递给paint方法的Graphics引用强制转换为Graphics2D引用:Graphics2Dg2d=(Graphics2D)g,9.3.4使用Graphics2D类绘图(续),绘图,27,实现例9_1的功能,使用Java2D使文字出现渐变色效果importjava.awt.*;importjavax.swing.*;publicclassEx9_3extendsJAppletpublicvoidpaint(Graphicsg)super.paint(g);Graphics2Dg2d=(Graphics2D)g;g2d.setPaint(newGradientPaint(0,0,Color.red,180,45,Color.yellow);g2d.drawString(ThisisaJavaApplet!,25,25);,9.3.4使用Graphics2D类绘图(续)Ex9_3.java,绘图,28,9.3.4使用Graphics2D类绘图(续)Ex9_3.java运行结果,绘图,29,9.4Swing基础,前面介绍了如何在屏幕上绘制普通的图形,但如果需要绘制一个按钮,并使其可以对点击事件作出响应,就需要使用javaSwing提供的组件其实前面我们已经用到的JFrame、JApplet都是Swing组件,它们分别代表窗口组件和Applet容器组件,30,9.4.1JFC与Swing,JFCJavaFoundationClasses(Java基础类)的缩写是关于GUI组件和服务的完整集合作为J2SE的一个有机部分,主要包含5个部分AWTJava2DAccessibilityDragimportjava.awt.event.*;importjavax.swing.*;publicclassEx9_4extendsJAppletpublicvoidinit()/获取浏览器提供的顶层容器的内容面板ContainercontentPane=getContentPane();contentPane.setLayout(newGridLayout(2,1);JButtonbutton=newJButton(Clickme);finalJLabellabel=newJLabel();contentPane.add(button);contentPane.add(label);button.addActionListener(newActionListener()publicvoidactionPerformed(ActionEventevent)Stringinformation=JOptionPane.showInputDialog(请输入一串字符);label.setText(information););/创建监听器语句结束/init方法结束,9.4.3在Applet和Application中应用Swing(续)Ex9_4.java,Swing基础,35,9.4.3在Applet和Application中应用Swing(续)Ex9_4.java运行结果,Swing基础,36,把JApplet换成JFrame,将例9-4的程序改为Applicationimportjavax.swing.*;importjava.awt.event.*;importjava.awt.*;publicclassEx9_5publicstaticvoidmain(Stringargs)/创建Frame窗体JFramef=newJFrame(“SimpleSwingApplication”);/获取f的容器面板ContainercontentPane=f.getContentPane();contentPane.setLayout(newGridLayout(2,1);JButtonbutton=newJButton(Clickme);finalJLabellabel=newJLabel();contentPane.add(button);/添加按钮contentPane.add(label);/添加标签button.addActionListener(newActionListener()publicvoidactionPerformed(ActionEventevent)Stringinformation=JOptionPane.showInputDialog(请输入一串字符);label.setText(information););f.setSize(200,100);/设置大小f.show();/显示f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,9.4.3在Applet和Application中应用Swing(续)Ex9_5.java,Swing基础,37,9.4.3在Applet和Application中应用Swing(续)Ex9_5.java运行结果,Swing基础,38,9.5Swing的特点和概念,SwingGUI组件javax.swing包源于AWT(packagejava.awt)的组件包括外观和感觉外观以及用户如何和程序交互轻量级组件完全用Java写成,不是用当前平台的GUI功能某些Swing组件也是重量级的,外观和功能受到本地窗口系统的限制,如java.awt.Windows的子类java.applet.Applet的子类,39,9.5.1Swing的组件和容器层次(续),JComponent类是除了顶层容器以外所有Swing组件的基类,根据继承关系,我们可以在每个基类中找找到大多数GUI组件的常见操作java.lang.Objectjava.awt.Componentjava.awt.Containerjavax.swing.JComponent,Swing的特点和概念,40,Component类包含paint、repaint方法,可以在屏幕上绘制组件大多数GUI组件直接或间接扩展ComponentContainer类容纳相关组件包括add方法,用来添加组件包括setLayout方法,这个方法可用来设置布局,以帮助Container对象对其中的组件进行定位和设置组件大小JComponent类多数Swing组件的超类可抽换的外观和感觉,即可根据需求定制外观和感觉。快捷键(通过键盘直接访问GUI组件)一般的事件处理功能,41,通常将javax.swing包里的Swing组件归为三个层次顶层容器中间层容器原子组件,9.5.1Swing的组件和容器层次(续),Swing的特点和概念,42,顶层容器Swing提供三个顶层容器的类JFrame实现单个主窗口JDialog实现一个二级窗口(对话框)JApplet在浏览器窗口中实现一个applet显示区域必须和操作系统打交道,所以都是重量级组件从继承结构上来看,它们分别是从原来AWT组件的Frame、Dialog和Applet类继承而来每个使用Swing组件的Java程序都必须至少有一个顶层容器,别的组件都必须放在这个顶层容器上才能显现出来,9.5.1Swing的组件和容器层次(续)顶层容器,Swing的特点和概念,43,中间层容器其存在的目的仅仅是为了容纳别的组件分为两类一般用途的JPanelJScrollPaneJSplitPaneJTabbedPaneJToolBar特殊用途的JInternalFrameJRootPane,9.5.1Swing的组件和容器层次(续)中间层容器,Swing的特点和概念,44,原子组件通常是在图形用户界面中和用户进行交互的组件基本功能是和用户交互信息,而不像前两种组件那样是用来容纳别的组件的根据功能的不同,可被分为三类显示不可编辑信息的JLabel、JProgressBar、JToolTip有控制功能、可以用来输入信息的JButton、JCheckBox、JRadioButton、JComboBox、JList、JMenu、JSlider、JSpinner、JTexComponent等能提供格式化的信息并允许用户选择的JColorChooser、JFileChooser、JTable、JTree,9.5.1Swing的组件和容器层次(续)原子组件,Swing的特点和概念,45,三层容器结构示例importjavax.swing.*;importjava.awt.*;publicclassEx9_6publicstaticvoidmain(Stringargs)JFrame.setDefaultLookAndFeelDecorated(true);JFrameframe=newJFrame(SwingFrame);ContainercontentPane=frame.getContentPane();/获得容器面板JPanelpanel=newJPanel();panel.setBorder(BorderFactory.createLineBorder(Color.black,5);panel.setLayout(newGridLayout(2,1);JLabellabel=newJLabel(Label,SwingConstants.CENTER);JButtonbutton=newJButton(Button);panel.add(label);panel.add(button);contentPane.add(panel);frame.pack();/对组件进行排列frame.show();/显示frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,9.5.1Swing的组件和容器层次(续)例9_6,Swing的特点和概念,46,组件,容器,容器,容器,47,Container(顶层容器),JApplet,JDialog(对话框),JFrame(窗口),48,中间容器,JScrollPane,JTabbedPane,JSplitPane,JPanel,JToolBar,49,50,9.5.1Swing的组件和容器层次(续)Swing组件列表,Swing的特点和概念,51,9.5.3事件处理,GUI是由事件驱动的,一些常见的事件包括:移动鼠标单双击鼠标各个按钮单击按钮在文本字段输入在菜单中选择菜单项在组合框中选择、单选和多选拖动滚动条关闭窗口Swing通过事件对象来包装事件,程序可以通过事件对象获得事件的有关信息,Swing的特点和概念,52,9.5.3事件处理(续)Swing组件的事件对象,Swing的特点和概念,53,编写事件处理程序时,要注意三个概念事件源与用户进行交互的GUI组件,表示事件来自于哪个组件或对象比如要对按钮被按下这个事件编写处理程序,按钮就是事件源事件监听器负责监听事件并做出响应一旦它监视到事件发生,就会自动调用相应的事件处理程序作出响应事件对象封装了有关已发生的事件的信息例如按钮被按下就是一个要被处理的事件,当用户按下按钮时,就会产生一个事件对象。事件对象中包含事件的相关信息和事件源,9.5.3事件处理(续)事件处理机制的三个部分,Swing的特点和概念,54,程序员应完成的两项任务为事件源注册一个事件监听器实现事件处理方法,9.5.3事件处理(续)程序员应完成的两项任务,Swing的特点和概念,55,56,通常我们用到的事件对象有ActionEvent发生在按下按钮、选择了一个项目、在文本框中按下回车键如:button,JList,JTextFiled,JTextAreaItemEvent发生在具有多个选项的组件上,如JCheckBox、JComboBoxChangeEvent用在可设定数值的拖曳杆上,例如JSlider、JProgressBar等WindowEvent用在处理窗口的操作MouseEvent用于鼠标的操作,9.5.3事件处理(续)事件对象,Swing的特点和概念,57,9.5.3事件处理(续)Swing事件源可能触发的事件及对应的事件监听器,Swing的特点和概念,58,9.5.3事件处理(续)Swing事件源可能触发的事件及对应的事件监听器,Swing的特点和概念,59,9.5.3事件处理(续)Swing事件源可能触发的事件及对应的事件监听器,Swing的特点和概念,60,常用组件与对应的接口、监视器、实现方法,61,实现事件监听器接口这种方法需要实现接口中所有的方法,对我们不需要进行处理的事件方法,也要列出来,其方法体使用一对空的花括号继承事件监听器适配器类有时我们并不需要对所有事件进行处理,为此Swing提供了一些适配器类Adapter,这些类含有所有Listener中方法的默认实现(就是什么也不做),因此我们就只需编写那些需要进行处理的事件的方法。例如,如果只想对鼠标敲击事件进行处理,如果使用MouseAdapter类,则只需要重写mouseClicked方法就可以了使用匿名内部类匿名内部类(AnonymousInnerClass),即是没有名字的内部类,这是Java为了方便我们编写程序而设计的一个机制。因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适,而且也免去了给它取名字的烦恼特别适用于已经继承了某个父类(例如Applet程序,主类必须继承JApplet类或Applet类),则根据java语法规则,就不能再继承适配器类的情况,而且使用这种方法程序看起来会比较清楚明了,9.5.3事件处理(续)三种实现事件处理的方法,Swing的特点和概念,创建一窗口,当鼠标在窗口中点击时,在窗口标题栏中显示点击位置坐标。方法一:实现MouseListener接口importjava.awt.event.*;/载入MouseListener类所在的包importjavax.swing.*;/载入JFrame所在的包publicclassEx9_8_1implementsMouseListenerJFramef;publicEx9_8_1()f=newJFrame();/新建一窗口f.setSize(300,150);f.show();f.addMouseListener(this);/为窗口增加鼠标事件监听器f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);publicvoidmousePressed(MouseEvente)publicvoidmouseReleased(MouseEvente)publicvoidmouseEntered(MouseEvente)publicvoidmouseExited(MouseEvente)publicvoidmouseClicked(MouseEvente)f.setTitle(点击坐标为(+e.getX()+,+e.getYpublicstaticvoidmain(Stringargs)newEx9_8_1();,9.5.3事件处理(续)例9_8_1,Swing的特点和概念,实现所有接口方法,哪怕什么也不做,63,方法二:继承MouseAdapter类importjava.awt.event.*;/载入MouseAdapter所在的包importjavax.swing.*;publicclassEx9_8_2extendsMouseAdapterJFramef;publicEx9_8_2()f=newJFrame();f.setSize(300,150);f.show();f.addMouseListener(this);f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);publicvoidmouseClicked(MouseEvente)f.setTitle(点击坐标为(+e.getX()+,+e.getY()+);publicstaticvoidmain(Stringargs)newEx9_8_2();,9.5.3事件处理(续)例9_8_2,Swing的特点和概念,64,方法三:使用匿名内部类importjava.awt.event.*;importjavax.swing.*;publicclassEx9_8_3JFramef;publicEx9_8_3()f=newJFrame();f.setSize(300,150);f.show();f.addMouseListener(newMouseAdapter()publicvoidmouseClicked(MouseEvente)f.setTitle(点击坐标为(+e.getX()+,+e.getY()+););/为窗口添加鼠标事件监听器语句结束f.addWindowListener(newWindowAdapter()publicvoidwindowClosing(WindowEvente)System.exit(0););/为窗口添加窗口事件监听器语句结束publicstaticvoidmain(Stringargs)newEx9_8_3();,9.5.3事件处理(续)例9_8_3,Swing的特点和概念,65,采用三种不同方法的程序,其运行效果都是一样的,当鼠标在窗口中点击的时候,窗口标题栏将出现所点位置的坐标信息,9.5.3事件处理(续)例9_8运行结果,Swing的特点和概念,66,9.6.3原子组件,Swing原子组件有很多种,与顶层容器和中间容器相比,原子组件用法都比较简单可将其分为三类显示不可编辑信息JLabel、JProgressBar、JToolTip有控制功能、可以用来输入信息JButton、JCheckBox、JRadioButton、JComboBox、JList、JMenu、JSlider、JSpinner、JTextComponent能提供格式化的信息并允许用户选择JColorChooser、JFileChooser、JTable、JTree,Swing组件,67,各类组件,Menu,TextField,TextArea,Button,Label,JChoiceButton,JRadioButton,JComboBox,JProgressBar,SingleList,JCheckbox,Example9/srcRadioButtonDemo.javaCheckBoxDemo.java,68,JLabel该组件上可以显示文字和图像,并能指定两者的位置提示信息通常不必直接处理JToolTip类通常使用setToolTipText()方法为组件设置提示信息有的组件例如JTabbedPane由多个部分组成,需要鼠标在不同部分停留时显示不同的提示信息,这时可以在其addTab()方法中设置提示信息参数,也可以通过setTooltipTextAt方法进行设置,9.6.2原子组件(续)第一类原子组件,Swing组件,69,7.4标签Labels,UsedtoprovidetextinstructionsorinformationonaGUI.Displaysasinglelineofread-onlytext.MustbeinstantiatedwithacallaconstructorSeveralLabelconstructorsandmethodsareshownbelow:,70,Label():constructsanemptylabel-textisnotdisplayed.Label(Strings):constructsaLabelthatdisplaysthetextswithleft-justedalignmentLabel(Strings,intalignment):constructsaLabelthatdisplaysthetextswiththespecifiedalignment.Usually,possiblealignmentsareLabel.LEFT,Label.CENTER,andLabel.RIGHT,71,getText():returnstheLabeltextsetText(Strings):setstheLabeltext/read-onlystringsetAlignment(intalignment):setsthelabelalignmenttoLabel.LEFT,Label.CENTERandLabel.RIGHT,72,setBackgroun(Colorc):setscolorforthebackgroundsetForeground(Colorc):setscolorforthestringinthelabelExampleLabelDemodemonstratetheclassLabel.Example:LabelTest.java,返回,73,7.3文本框,java.awt包中的类TextField类创建文本框用户可以在文本框输入单行的文本,74,1.TextField类的主要方法,TextField(intx)如果使用这个构造方法创建文本框对象,文本框中的可见字符序列的长度为x个机器字符长。文本框是可编辑的,用户可以在文本框中输入若干个字符。TextField(Strings)如果使用这个构造方法创建文本框对象,则文本框的初始字符串为s。文本框是可编辑的,可以在文本框中输入若干个字符。TextField(Strings,intx):ConstructsaTextFieldobjectdisplayingastringwiththelengthofTextFieldpublicvoidsetText(Strings)文本框对象调用该方法可以设置文本框中的文本为参数s指定的文本,文本框中先前的文本将被清除。publicStringgetText()文本框对象调用该方法可以获取文本框中的文本。,75,setEchoChar(charc):Setthecharacterctobedisplayed.Usedforpassword.setEditable(booleanb):SettheeditibilityoftheTextFeild,trueisforeditable,falseisforuneditablepublicvoidaddActionListener(ActionListenerl)文本框对象调用该方法可以向文本框增加动作监视器(将监视器注册到文本框)。例子:Example8_1.java,76,importjava.applet.*;importjava.awt.*;publicclassExample8_1extendsAppletTextFieldtext1,text2,text3;publicvoidinit()text1=newTextField(Password:,10);text1.setEditable(false);text2=newTextField(10);text2.setEchoChar(*);text3=newTextField(Iamatextfiled,20);text3.setText(Change);add(text1);add(text2);add(text3);,77,Example7_3.java(thisaslistener)Example8_2.java(otherobjectaslistener)(见后),78,importjava.awt.*;importjava.awt.event.*;classMyWindowextendsFrameimplementsActionListenerTextFieldtext1,text2,text3;MyWindow()setLayout(newFlowLayout();text1=newTextField(8);text2=newTextField(8);text3=newTextField(15);add(text1);add(text2);add(text3);/事件源text1、1调用addActionListener(),将本类对象作为监视器text1.addActionListener(this);text2.addActionListener(this);setBounds(100,100,150,150);setVisible(true);validate();publicvoidactionPerformed(ActionEvente)if(e.getSource()=text1)Stringword=text1.getText();if(word.equals(boy)text3.setText(男孩);elseif(word.equals(girl)text3.setText(女孩);elseif(word.equals(sun)text3.setText(太阳);,elsetext3.setText(没有该单词);elseif(e.getSource()=text2)Stringword=text2.getText();if(word.equals(男孩)text3.setText(boy);elseif(word.equals(女孩)text3.setText(girl);elseif(word.equals(太阳)text3.setText(sun);elsetext3.setText(没有该单词);publicclassExample7_3publicstaticvoidmain(Stringargs)MyWindowwin=newMyWindow();,79,importjava.applet.*;importjava.awt.*;importjava.awt.event.*;publicclassExample8_2extendsAppletstaticTextFieldtext1,text2,text3;Teacherteacher;publicvoidinit()text1=newTextField(10);text2=newTextField(10);/text3=newTextField(10);add(text1);add(text2);/add(text3);text2.setBackground(Color.red);teacher=newTeacher();/事件源text1调用addActionListener(),将Teacher类对象作为监视器text1.addActionListener(teacher);,80,classTeacherimplementsActionListenerpublicvoidactionPerformed(ActionEvente)if(e.getSource()=Example8_2.text1),返回,81,JProgressBar在一些软件运行时,会出现一个进度条告知目前进度如何。通过使用该组件我们可以轻松地为软件加上一个进度条随时间增加,进度条输出进度变化情况,同时标签上显示出当前进度。鼠标移到两组件时,显示提示信息,9.6.2原子组件(续)例9_9,Swing组件,82,importjavax.swing.*;importjava.awt.*;importjavax.swing.event.*;importjava.awt.event.*;publicclassEx9_9implementsChangeListenerJLabellabel;JProgressBarpb;publicEx9_9()intvalue=0;JFramef=newJFrame(第一类原子组件演示);ContainercontentPane=f.getContentPane();label=newJLabel(,JLabel.CENTER);label.setToolTipText(显示进度信息);pb=newJProgressBar();pb.setOrientation(JProgressBar.HORIZONTAL);/设置进度条方向pb.setMinimum(0);/设置最小值pb.setMaximum(100);/设置最大值,83,pb.setValue(value);/初值pb.setStringPainted(true);/设置进度条上显示进度pb.addChangeListener(this);/增加时间监听器pb.setToolTipText(进度条);/设置提示信息contentPane.add(pb,BorderLayout.CENTER);contentPane.add(label,BorderLayout.SOUTH);f.setSize(400,60);f.setVisible(true);for(inti=1;i0)?(1000/fps):100;/Setupatimerthatcallsthisobjectsactionhandler.timer=newTimer(delay,this);timer.setInitialDelay(0);timer.setCoalesce(true);,9.7.5定时器(续)AnimatorApplicationTimer.java,其它Swing特性,148,addWindowListener(newWindowAdapter()publicvoidwindowIconified(WindowEvente)stopAnimation();publicvoidwindowDeiconified(WindowEvente)startAnimation();publicvoidwindowClosing(WindowEvente)System.exit(0););label=newJLabel(Frame,JLabel.CENTER);label.addMouseListener(newMouseAdapter()publicvoidmousePressed(MouseEvente)if(frozen)frozen=false;startAnimation();elsefrozen=true;stopAnimation(););getContentPane().add(label,BorderLayout.CENTER);,9.7.5定时器(续)AnimatorApplicationTimer.java,其它Swing特性,149,/Canbeinvokedbyanythread(sincetimeristhread-safe).publicvoidstartAnimation()if(frozen)/Donothing.Theuserhasrequestedthatwe/stopchangingtheimage.else/Startanimating!if(!timer.isRunning()timer.start();/Canbeinvokedbyanythread(sincetimeristhread-safe).publicvoidstopAnimation()/Stoptheanimatingthread.if(timer.isRunning()timer.stop();,9.7.5定时器(续)AnimatorApplicationTimer.java,其它Swing特性,150,publicvoidactionPerformed(ActionEvente)/Advancetheanimationframe.frameNumber+;label.setText(Frame+frameNumber);publicstaticvoidmain(Stringargs)AnimatorApplicationTimeranimator=null;intfps=10;/Getframespersecondfromthecommandlineargument.if(args.length0)tryfps=Integer.parseInt(args0);catch(Exceptione)animator=newAnimatorApplicationTimer(fps,AnimatorwithTimer);animator.pack();animator.setVisible(true);animator.startAnimation();,9.7.5定时器(续)AnimatorApplicationTimer.java,其它Swing特性,151,说明为窗口通过addWindowListener方法添加了事件监听器,窗口最小化时停止Timer,窗口恢复时重新启动Timer为标签通过addMouthListener方法添加了事件监听器,在标签上点击时可以交替暂停和启动TimerTimer组件会根据程序员设定的间隔时间,周期性的触发ActionEvent事件,在ActionEvent中让标签上显示的信息递增,9.7.5定时器(续)AnimatorApplicationTimer运行结果,其它Swing特性,152,9.8本章小结,本章内容Applet的概念及基本方法Java的绘图机制,及实现更为出色绘图效果的Java2DSwing的结构层次、布局管理,以及如何为其编写事件处理程序很多Swing组件都要使用的特色如Action对象、边框、外观风格、线程、定时器本章要求掌握图形用户界面程序的编程方法、思路,学会在Applet和Application中引入图形用户界面了解Java的图形环境,绘制简单图形掌握Swing的结构和特点,学会使用布局管理、事件处理,以及常用的Swing组件,153,AWT(AbstractWindowToolkit)组件库为各类Java应用程序提供了多种GUI工具。提供的组件多为重量级组件。Swing,以awt为基础,提供了一整套用Java语言编写的GUI组件,以保证可移植性。Java2D是一种图形API,它为Java应用程序提供了高级的二维(2D)图形图像处理类的集合,同时,该API还包含了一套扩展字体集合。DragandDrop技术提供了Java和本地应用程序之间的互用性,用来在Java应用程序和不支持Java技术的应用程序之间交换数据。AccessibilityAPI提供了一套高级工具,可以辅助开发使用非传统输入和输出方式的应用程序,它提供了一个辅助技术接口,如:屏幕阅读器、屏幕放大器、听觉文本阅读器(语音处理),等等。,返回,154,9.6.1顶层容器,Swing提供了3个顶层容器类:JFrameJAppletJDialog都是重量级组件,分别继承了AWT组件Frame、Applet和Dialog每个顶层容器都有一个内容面板,通常直接或间接的容纳别的可视组件可以有选择地为顶层容器添加菜单,菜单被放置在顶层容器上,但是在内容面板之外,Swing组件,返回,155,java.lang.Objectjava.awt.Componentjava.awt.Containerjava.awt.Windowjava.awt.Framejavax.swing.JFrame每个包含Swing组件的主窗口都应用JFrame来实现,9.6.1顶层容器(续)JFrame的继承结构,Swing组件,156,java.lang.Objectjava.awt.Componentjava.awt.Containerjava.awt.Paneljava.awt.Appletjavax.swing.JApplet每个包含Swing组件的Applet都应作为JApplet的子类来实现,Swing组件,9.6.1顶层容器(续)JApplet的继承结构,157,java.lang.Objectjava.awt.Componentjava.awt.Containerjava.awt.Windo
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!