分享
分销 收藏 举报 申诉 / 83
播放页_导航下方通栏广告

类型第8章-图形用户界面.ppt

  • 上传人:二***
  • 文档编号:12784390
  • 上传时间:2025-12-06
  • 格式:PPT
  • 页数:83
  • 大小:747.04KB
  • 下载积分:5 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    图形 用户界面
    资源描述:
    ,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二层,第三层,第四层,第五层,*,第,8,章 图形用户界面,本章任务:,了解什么是容器,;,了解什么是组件,;,了解如何创建与使用组件,;,如何使用布局管理器对组件进行管理,;,如何使用,Java,的事件处理机制控制组件。,本章主要内容,1.S,wing,与,AWT,组件,2.Swing,类的层次结构,3.,容器,4.,组件,5.,组件布局管理,6.,事件处理机制,8.1 S,w,i,n,g,与,AWT,组件,Java,语言提供的,GUI,编程类库只有抽象窗口工具箱(,AWT,:,Abstract Window Toolkit,)。使用,AWT,库在处理用户界面组件时,把组件的创建和行为都委托给本地计算机的,GUI,工具处理,使用,AWT,库在处理复杂图形时,在不同平台会有差别。,Swing,不需要使用本地计算机提供的,GUI,功能,,Swing,可以编写,Java,程序实现图形用户界面,可以接收来自键盘、鼠标和其他输入设备的数据输入。,Swing,的所有成员都是,javax.swing,包中的一部分。,8.2 S,w,i,n,g,类的层次结构,本节的内容主要介绍,Swing,类的层次关系。如图,显示了组件类的继承关系。,说明:,如图所示,,Swing,组件都是,AWT,的,Container,类的直接子类和间接子类,,Container,类是用来管理相关组件的类。,Swing,组件包含了两种类型的组件类:,(,1,)顶层容器类;,(,2,)轻量级组件类,Jcomponent,,它是一个抽象类,用于定义所有子类组件的一般方法,所有的,Swing,组件都是,Jcomponent,抽象类的子类,,8.3,容器,8.3.1,窗口容器,JFrame,是一个用来创建窗口的类,使用,JFrame,类可以创建出在用户桌面上显示的窗口,同时它也是一个顶层的容器框架,在其中可以添加各种组件。,例,8.1,本例介绍的应用程序创建了一个可以移动、改变大小、最大化、可变成图标且可以关闭的窗口,运行程序可以弹出窗口对象,结果如图所示。,import javax.swing.*;,import java.awt.*;,public class,JF0,extends JFrame,public JF0(String s),super(s);,/,调用父类,JFrame,的构造方法,给窗口命名,setBounds(200,200,500,400),;/,设置窗口位置、窗口大小,setVisible(true);/,设置窗口是否为可见,try/,设置外观,程序代码:,UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();,catch(Exception e),setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,public static void main(String args),JF0 d=new JF0(,主窗口,);,运行结果显示:,创建的窗口对象,说明,:,本程序中,JF0,类是继承自类,JFrame,的子类,所以在为其设计的构造,JF0,(,String s,)方法中直接使用了类,JFrame,的一些主要方法。,调用父类的构造方法,super(s),为窗口指定名称,,s,可以在创建窗口对象时具体指定,例如“主窗口”。,通过类,JFrame,的,setBounds(200,200,500,400),方法设置窗口位置、窗口的大小。,通过,setVisible(true),方法用来指定窗口可见(参数为,false,时为不可见)。,通过,UIManager.setLookAndFeel,方法指定窗口的外观,担心有的系统不支持而设计了,try,语句解决出错问题。,通过,setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE),设定窗口对象关闭动作。,在主方法,main,中通过创建,JF0,类的对象,d,创建出窗口,同时通过构造方法指定其窗口名称为“主窗口”。,JF0,还通过构造方法提供了一个指定窗口名称的接口,可以在创建其对象时根据需要指定窗口名称。,说明,:,8.3.2,对话框容器,对话框(,JDialog,类)是,GUI,中很常见的窗口对象,有着广泛的应用。对话框和普通窗口最大的不同就是对话框是依附在某个窗口上的,一旦它所依附的窗口关闭了,对话框也要随着关闭。在对话框窗口中可以添加其他组件,所以它也是一个容器。,例,8.2,创建对话框的例子,程序运行结果如图所示。,import javax.swing.*;,public class,JD,extends JDialog,public JD(JFrame f,String s),super(f,s);/,调用父类,JDialog,的构造方法,给对话框,窗口命名,setBounds(300,300,200,200);/,设置对话框窗口大小位置,setVisible(true);/,设置对话框窗口是否为可见,setModal(false);/,设置对话框窗口模式,setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);,public static void main(String args),JF0 f=new JF0(,主窗口,);,/,创建主窗口对象,JD d=new JD(f,这是一个对话框窗口,);,/,创建对话框对象,创建的对话框对象,运行结果显示:,8.3.3,面板容器,面板(,JPanel,类)是一个无边框的容器,可以包容其他组件或另一个面板对象。,使用面板的目的是为了分层次、分区域管理各种组件,,,使组件放置在精确的位置,。面板与其他顶层容器不同,它是一个中间容器,它既是容器又是组件,它可以容纳其他组件,也可以添加到其他容器之中。一个窗口中可以添加多个面板对象。,例,8.3,创建含有面板窗口的例子,程序运行结果如图所示。,import javax.swing.*;,import java.awt.*;,import java.awt.Color;,public class,JP1,extends JFrame,public JP1(JFrame f,int x,int y,int w,int h),Container c=getContentPane();,/,调用,getContentPane(),方法创建,Container,内容面板对象,c,c.setLayout(null);/,设置不采用任何布局方式,c.setBackground(Color.yellow);,/,设置面板的背景色为黄色,f.add(c);,/,将内容面板,c,加入到窗口对象,f,中,JPanel p=new JPanel();,/,创建面板对象,p,p.setBounds(x,y,w,h);/,设置面板,p,的位置、大小,p.setBackground(Color.blue);,/,设置面板的背景色为蓝色,c.add(p);,/,将面板,p,加入到窗口的内容面板,c,中,public static void main(String args),JP1 f1=new JP1(new,JF0,(,添加面板的窗口,),100,50,200,200);,运行结果显示:,含有面板对象的窗口,说明:,面板对象,p,是通过,JPanel,类创建的,当容器不使用布局管理器时(,setLayout(null),),它可以通过,setBounds(x,y,w,h),方法设置其位置与大小,可以设置背景颜色、指定布局管理器。,在,main,方法中创建了,JP1,类的对象,f1,,它是一个具有内容面板对象,c,、普通面板,p,的窗口对象,。,JP1,还通过构造方法提供了一个指定普通面板,p,位置、大小的接口,可以在创建其对象时根据需要来确定。,8.4,组件,组件(,JComponent,)是构成,GUI,的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。,组件一般作为一个,对象,放置在,容器,(,Container,)内,,容器是能容纳和排列组件的对象,如,Applet,界面、面板、窗口等。通过容器的,add,方法可以把组件标签、按钮、文本框、菜单等加入到容器中。,*,本节的内容主要介绍如何在容器中添加,Swing,组件。注意本节中所有组件使用的窗口对象都是通过例,8.1,中设计的自定义类,JF0,创建的。,8.4.1,标签组件,1,创建标签,标签(,JLabel,)的功能是显示单行的字符串,可在屏幕上显示一些提示性、说明性的文字。,例,8.4,本例应用程序用来创建添加有不同标签的窗口,程序运行结果可参看链接。,import javax.swing.*;,import java.awt.*;,public class,JL1,extends JFrame,private JLabel label;,public JL1(JFrame f,JPanel p),f.add(p);/,将面板,p,加入到窗口,f,中,label=new JLabel(“,显示文字的标签,”,);,/,使用文本创建,一个标签对象,label.,setFont,(new Font(“Serif”,Font.PLAIN,20);/,设置,标签字体,label.,setToolTipText,(,这是标签对象,);/,设置标签的工具提示,p.add(label);/,将标签对象添加到面板对象,p,上,public static void main(String args),JL1 f1=new JL1(new JF0(,添加标签的窗口,),new JPanel();,使用标签对象的窗口,说明:本程序通过设计,JL1,类创建了一个包含,JLabel,标签对象,label,。通过其构造方法的参数传递了两个对象变量,一个是,JF0,类的窗口对象,f,,一个是普通面板,p,。,运行结果显示:,2.,标签的构造方法,(,1,),JLabel(),方法用来创建一个没有显示内容的标签对象。,(,2,),JLabel(String text),方法用来创建一个显示文字的标签对象,默认为居中排列。,(,3,),JLabel(String text,int alignment),方法除了用来创建一个显示文字为,text,的标签对象外,并指定其排列方式。排列方式有,3,种,分别用,3,个常量,LEFT,、,CENTER,和,RIGHT,表示左对齐、居中和右对齐。,(,4,),JLabel(Icon image),方法用来创建一个显示为图标的标签对象,默认为居中排列。,(,5,),JLabel(Icon image,int alignment),方法用来创建一个显示为图标的标签对象,并指定其排列方式。,3.,标签的常用方法,(,1,),void setText(String label),设置显示的字符串。,(,2,),String getText(),返回当前显示的字符串。,(,3,),void setAlignment(int alignment),设置对齐方式。,(,4,),void setFont(Font f),设置显示的字符串的字体。,(,5,),void setBackground(Color c),设置显示的字符串的背景颜色。,(,6,),void setForekground(Color c),设置显示的字符串的颜色。,8.4.2,按钮组件,Swing,提供了标准按钮(,JButton,)组件,按钮可以带有文字标题与图标。,1,按钮的创建,例,8.5,本例应用程序用来创建添加有不同按钮的窗口,程序运行结果参看链接。,import javax.swing.*;,import java.awt.*;,import java.awt.event.*;,public class,JB,extends JFrame,private JButton button1,button2;,public JB(JFrame f,JPanel p),f.add(p);/,将面板,p,加入到窗口,f,中,button1=new JButton(,按钮,1);,/,创建按钮对象,button1.,setFont,(new Font(Serif,Font.PLAIN,20);,ImageIcon img1=new ImageIcon(,图片,/1.gif);,ImageIcon img2=new ImageIcon(,图片,/2.gif);,button2=new JButton(,按钮,2,img2);,button2.setRolloverIcon(img1);,button2.setFont(new Font(Serif,Font.PLAIN,14);,/,为组件注册监听器,BHandler,h,=new BHandler();,button1.,addActionListener,(h);,button2.,addActionListener,(h);,/,将各种组件添加到内容面板,p,.add(button1);,p,.add(button2);,public static void main(String args),JB f1=new JB(new JF0(,添加按钮的窗口,),new JPanel();,private class,BHandler,implements,ActionListener,public void,actionPerformed,(ActionEvent event),JOptionPane.show,MessageDialog,(JB.this,你按了,:+event.getActionCommand();,在例,8.5,中,可以看到创建按钮对象的方式及控制使用方式。,运行结果显示:,编写本应用程序要在“程序,/,图片”目录下先保存两个名称为,1.gif,、,2.gif,的图片文件。,在处理命令按钮的单击事件时,需要实现,ActionListener,事件接口类中的,actionPerformed(ActionEvent event),方法。通过,addActionListener(h),方法将监听器注册到命令按钮上。,通过,JOptionPane.showMessageDialog(JB.this,你按了,:+event.getActionCommand(),方法能够产生一个消息提示对话框。,注意:,2,按钮的构造方法,(,1,),JButton(),创建一个没有标题的按钮。,(,2,),JButton(String text),创建一个带标题的按钮。,(,3,),JButton(Icon image),创建一个有图标的按钮。,(,4,),JButton(String text,Icon image),创建一个有标题、有图标的按钮。,8.4.3,文本框组件,文本框(,JTextField,)组件用来接收用户键盘输入的单行文本信息。,1,创建文本框与密码框,例,8.6,本例应用程序用来创建添加有不同文本框的窗口,程序运行结果参看链接。,import javax.swing.*;,public class,JT,extends JFrame,private JTextField t1,t2,t3;,private JPasswordField kl;,public,JT,(JFrame f,JPanel p),f.add(p);/,将面板,p,加入到窗口,f,中,p.setLayout(new FlowLayout();,p.setBackground(Color.YELLOW);,t1=new JTextField(10);/,创建文本框对象,宽度为,10,t2=new JTextField(“,请输入文本,”,);/,创建带有初始,文本的文本框对象,t2.setFont(new Font(Serif,Font.PLAIN,12);,t3=new JTextField(“,不可编辑的文本框,”,20);/,创建带有,初始文本的文本框,宽度为,20,t3.setFont(new Font(Serif,Font.PLAIN,12);,t3.setEditable(false);/,设置该文本框为不可编辑状态,kl=new JPasswordField(,口令,10);/,创建密码框,p.add(t1);p.add(t2),;,p.add(t3);p.add(kl);,public static void main(String args),JT d=new JT(new JF0(,添加文本框的窗口,),new JPanel();,创建不同的文本框,运行结果显示:,(,1,),JTextField(),创建一个默认宽度的文本框。,(,2,),JTextField(int columns),创建一个指定宽度的文本框。,(,3,),JTextField(String text),创建一个带有初始文本内容的文本框。,(,4,),JTextField(String text,int columns),创建一个带有初始文本内容并具有指定宽度的文本框。,2.,文本框的构造方法,8.4.4,文本区组件,与文本框组件只显示一行不同,文本区(,JTextArea,)可以显示大段的文本。,1,创建文本区,例,8.7,本例应用程序用来创建添加有两个文本区组件的窗口,,程序运行结果,如图所示,(见课本,P162,)。,(,1,),JTextArea(),创建一个默认大小的文本区。,(,2,),JTextArea(int rows,int columns),创建一个指定行和列数的文本区。,(,3,),JTextArea(String text),创建一个带有初始文本内容的文本区。,(,4,),JTextArea(String text,int rows,int columns),创建一个带有初始文本内容并具有指定行和列数的文本区。,2,文本区的构造方法,(,1,),public void append(String str),在文本区尾部添加文本。,(,2,),public void insert(String str,int pos),在文本区指定位置插入文本。,(,3,),public void setText(String t),设定文本区内容,会将原来的内容清除。,(,4,),public int getRows(),返回文本区的行数。,3,文本区的常用方法,(,5,),public void setRows(int rows),设定文本区的行数。,(,6,),public int getColumns(),返回文本区的列数。,(,7,),public void setColumns(int columns),设定文本区的列数。,(,8,),public void setEditable(boolean b),设定文本区的读写状态。,8.4.5,单选按钮组件,单选按钮包含一组按钮,按钮处于选中或未选中两种状态。用户通过按钮只能选择其中的一个选项。单选按钮由,JRadioButton,类与,ButtonGroup,类的对象共同构成。,JRadioButton,用于设置各个单选选项,,ButtonGroup,对象用于维护一组互斥单选选项的关系。,例,8.8,本例应用程序用来创建包含有,3,个颜色单选按钮的窗口,根据选择可以显示不同的颜色,,程序运行结果,如图所示(见课本,P164,)。,8.4.6,复选框,复选框(,JCheckbox,)同样存在选中或未选中两种状态。通过复选框用户可以一次做出多项选择。,例,8.9,本例应用程序用来创建包含两个字体复选按钮的窗口,根据选择可以改变窗口中标签对象的字体,,程序运行结果,如图所示(见课本,P165,Jcb,)。,下拉列表(,JComboBox,)与单选按钮类似,同样存在选中或未选中两种状态。使用下拉列表可以让用户在列表框的多个选项中选择一个选项。列表框的所有选项都是可见的。,例,8.10,本例应用程序用来创建包含一个下拉老板组件的窗口,根据选择可以改变窗口中标签对象的字体,,程序运行结果,如图所示(见课本,P166,Jlb,)。,8.4.7,下拉列表组件,8.5,组件布局管理,组件是由布局管理器对象来管理的,通过容器的,setLayout,方法可以调出布局管理器来确定组件的存放位置。,本节的内容主要介绍如何使用布局管理器确定存放在容器中组件的摆放位置。注意本节中使用的窗口对象都是在自定义类中直接创建的(同样可以通过,JF0,类来创建,那样可以统一主界面)。,8.5.1,顺序布局管理器,顺序布局(,FlowLayout,)管理器,是最基本的布局管理器,是容器指定的一个默认的布局管理器。它负责把组件,一个接一个地从左到右顺序排列,,,一行排满后就转到下一行继续排列,。,在顺序布局管理器领导下,一个组件通过容器的,add,方法就可以把自己加入到容器的组件队列中。但顺序布局管理器功能有限,不能很好地控制组件的排列,所以常用在组件较少的情况下。,8.5.2,边界布局管理器,边界布局,(,BorderLayout,),管理器,把容器(这里是,Applet,)分为五个区:北区、南区、东区、西区和中区。这几个区的分布规律是“上北下南,左西右东”,与地图的方位相同。组件可以指定自己放在那个区内,因为只有,5,个区,所以最多只能容纳,5,个组件,否则要采取其它布局方式。,例,8.11,本例应用程序用来创建一个使用边界布局管理器存放组件的窗口,程序运行结果参看链接。,import javax.swing.JFrame;,import javax.swing.*;,import java.awt.*;,public class,BL,extends JFrame,BorderLayout,bl,=new BorderLayout();/,创建,BorderLayout,布局管理器对象,JButton bN,bS,bW,bE,bC;,public,BL,(),super(,布局管理器,);setSize(300,200);,setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,/,创建,5,个按钮对象,bN=new JButton(,北,);,bS=new JButton(,南,);bE=new JButton(,东,);,bW=new JButton(,西,);bC=new JButton(,中,);,Container c=getContentPane();/,创建内容面板,c.setLayout(bl);/,设置内容面板的布局管理器为,布局管理器,bl,c.add(North,bN);c.add(South,bS);,c.add(East,bE);c.add(West,bW);,c.add(Center,bC);,setVisible(true);,public static void main(String args),BL d=new BL();,说明:在,add,方法中,第,1,个参数表示组件的摆放位置,必须从,North,、,South,、,East,、,West,、,Center,中选择一个。第,2,个参数是组件对象名。,运行结果显示,(BL),:,边界布局管理器,8.5.3,卡片布局管理器,卡片布局,(,CardLayout,),管理器,可以管理多个组件,它将组件像卡片一样叠放起来,每次只显示一个。因此需要使用某种方法翻阅这些卡片。,例,8.12,本例应用程序用来创建的窗口分为两个层次,最底层为内容面板对象,在其上面使用边界布局管理器在中间存放了一个面板对象,pane,,在下方存放了一个名称为“选择卡片”的按钮对象,button,。程序运行结果参看链接。,运行结果显示,(CL),:,使用卡片布局管理器的窗口,import java.awt.*;,import java.awt.event.*;,import javax.swing.*;,public class,CL,extends JFrame,JPanel pane=new JPanel();,JButton button=new JButton(,选择卡片,);,CardLayout,card,=new CardLayout();,public,CL,(),super(,使用卡片布局管理器的窗口,);setSize(300,200);,setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,pane.setLayout(,card,);/,为面板,pane,调出卡片布局管理器,/,通过循环语句直接将创建出的,5,个按钮对象添加到,pane,面,板上,for(int i=1;i=5;i+)pane.add(String.valueOf(i),new,Button(,卡片号为:,+i);,card.show(pane,String.valueOf(1);,Container c=getContentPane();,c.add(pane,BorderLayout.CENTER);/,为内容面板,c,调出边,界布局管理器,c.add(button,BorderLayout.SOUTH);,/,在注册监听器同时创建,ActionListener,接口对象,button.addActionListener(new ActionListener(),public void,actionPerformed,(ActionEvent e),card.next(pane);,);,setVisible(true);,public static void main(String arguments)CL ct=new CL();,8.5.4,网络布局管理器,网格布局,(,GridLayout,),管理器,把容器区域分成若干个网格,每个网格可以放置一个组件,这种布局方式对数量众多的组件很合适。,例,8.13,本例应用程序用来创建的窗口在内容面板对象上使用网格布局管理器划分了,3,行,3,列,,9,个网格,存放了,6,个按钮对象,,3,个标签对象,程序运行结果如图所示(见课本,P170,)。,如果要在网格之间添加间距,例如创建,GridLayout(3,3,10,10),对象时设置网格之间距离为,10,个点距。,使用网格布局管理器的窗口,运行结果显示,(GL),:,8.5.5,组件的精确定位方式,存放组件也可以不用布局管理器,即使用,setLayout(null),方法使布局管理器为空,这时可以使用,setBounds(int x,int y,int w,int h),方法精确指出组件在容器中的存放位置。,例,8.14,本例应用程序用来创建的窗口在内容面板对象上使用精确定位方式指定了组件的存放位置与大小,程序运行结果如图所示(见课本,P171,)。,使用精确定位方式指定组件的存放位置,运行结果显示,(NL),:,8.6,事件处理机制,在前面编写的程序中,对命令按钮、单选按钮、复选框等不同组件添加了监听器,当有单击、选择选项等事件发生时,会进行相应的处理。,Java,在处理事件问题上设计了,Event,类,。,本节的内容主要介绍,Java,有哪些类型的事件处理类,它们是如何解决事件问题的。,8.6.1 Java,的事件处理机制,1.,事件,在图形用户界面中,程序和用户的交互是通过组件响应各种事件来实现的。例如,用户单击了一个按钮,意味着发生了按钮的单击事件;选中下拉列表中的一个选项,意味着发生了一个选项事件。,2.,事件处理方法,当发生事件时做出反应,需要编写一个或多个对应的事件处理方法,通过监听器对象可以对事件源对象进行监听,当监听到事件发生时,就可以调用事件处理方法处理事件问题。,3,.,事件处理模型,事件处理模型分为,3,个部分:,事件源对象,、,事件监听器对象,与,事件对象,。,能产生事件的组件叫做事件源,如按钮。,事件监听器注册在事件源对象(按钮或包含按钮的容器)上,用来监听事件是否发生,当事件发生时将调用事件处理方法解决问题。,事件对象用来封装已发生事件的信息,在事件发生后,将信息传递给事件处理方法进行处理。,事件监听器对象是一个实现了相应事件接口类所有事件方法的类。例如例,8.5,中,BHandler,类,就是一个事件监听器类,它实现了单击事件接口类,ActionListener,的,actionPerformed(ActionEvent e),抽象方法,因此,可以通过,BHandler,类创建出事件监听器对象,h,。事件监听器对象具有两个功能,监听事件是否发生,发生后使用事件处理方法解决问题。,事件对象是由系统自动创建的。,8.6.2 Java,的常用事件接口与接口方法,Java,将所有组件可能发生的事件进行了分类,,具有共同特征的事件被抽象为一个事件类,Event,或事件接口,。它们用来处理该类组件发生的事件。,事件接口类中定义了一些抽象的方法来统一处理某一类事件,因此,在设计事件监听器类时必须实现或覆盖这些抽象处理方法,。,Java,定义的常用事件类和事件接口如表,8.1,所示,(,见课本,P173),。,1,通过,自定义内部类,创建监听器对象,例,8.15,本程序在窗口上创建了一个按钮和一个标签,用鼠标单击按钮时,会听到一声响声。如图所示。,执行单击事件的窗口,8.6.3,事件处理机制的不同实现方式,import javax.swing.*;,import java.awt.*;,import java.awt.event.*;,public class,JB1,extends JFrame,public,JB1,(JFrame f,JPanel p),f.add(p);/,将面板,p,加入到窗口,f,中,p.add(new,Label(,按一下按钮可听到响声!,Label.CENTER);,Button b=new Button(,按钮,);,p.add(b);,BHandler h=new BHandler();,/,创建事件监听器对象,b.addActionListener(h);/,注册事件监听器对象,public static void main(String args),JB1 f1=new JB1(new JF0(,单击按钮事件,),new JPanel();,private class,BHandler,implements ActionListener,public void actionPerformed(ActionEvent e),Toolkit.getDefaultToolkit().beep();,说明:,(,1,)在应用程序头部要引入系统事件类包,java.awt.event.*,。,(,2,)本程序在类,JB1,中设计了一个,自定义内部类,BHandler,,在类中实现单击事件监听器接口,ActionListener,的,actionPerformed,事件接口方法,即编写事件处理代码以响应事件的发生。当单击按钮时,系统将产生,ActionEvent,事件对象,e,,事件监听器对象传递,e,给,actionPerformed,方法处理这个事件。,(,3,)根据类,BHandler,可以创建监听器对象,h,并注册给按钮对象,b,。,单击事件类,ActionEvent,有以下一些常用方法:,(,1,),public String getActionCommand(),可返回事件源的标签。如,b,的标签是“按钮”。,(,2,),public Object getSource(),返回产生事件的对象名,如,b,。,(,3,),public int getModifiers,返回事件发生时功能控制键的状态,它们可能是功能键常数,SHIFT_MASK,、,CTRL_MASK,、,ALT_MASK,。,2,在注册时通过匿名类直接创建监听器对象,例,8.16,本程序运行结果与前例相同。仅用来说明创建监听器的方式。,import javax.swing.*;,import java.awt.*;,import java.awt.event.*;,public class,JB2,extends JFrame,public,JB2,(JFrame f,JPanel p),f.add(p);/,将面板,p,加入到窗口,f,中,p.add(new Label(,按一下按钮可听到响声!,Label.CENTER);,Button b=new Button(,按钮,);,p.add(b);,/,注册事件监听器对象,b.addActionListener(,new ActionListener(),public void actionPerformed(ActionEvent e),Toolkit.getDefaultToolkit().beep();,);,public static void main(String args),JB2 f1=new JB2(new JF0(,单击按钮事件,),new JPanel();,说明:,在例,8.16,中使用了匿名类,匿名类是指在声明一个类时不给它命名的类。,例,8.16,取消了例,8.15,中的,ActionListener,的子类,BHandler,的创建过程,直接将这个子类的实例化与初始化表达式,new ActionListener(),作为参数传递给了按钮对象的,addActionListener,方法,并在方法的括号内实现了,ActionListener,接口类的,actionPerformed,方法。这是匿名类的一种典型使用方式。,本程序通过给事件源添加监听器对象时,通过匿名类方式创建了监听器对象。,例,8.17,本程序运行结果与前例相同。仅用来说明创建监听器的方式。,import javax.swing.*;,import java.awt.*;,import java.awt.event.*;,public class,JB3,extends JFrame implements ActionListener,public,JB3,(JFrame f,JPanel p),f.add(p);/,将面板,p,加入到窗口,f,中,p.add(new Label(,按一下按钮可听到响声!,Label.CENTER);,Button b=new Button(,按钮,);,p.add(b);,3,通过主类创建监听器对象,b.addActionListener(this);/,注册事件监听器对象,public void actionPerformed(ActionEvent e),Toolkit.getDefaultToolkit().beep();,public static void main(String args),JB3 f1=new JB3(new JF0(,单击按钮事件,),new JPanel();,说明:,本程序通过给,JB3,添加,ActionListener,接口,并实现了接口的,actionPerformed,方法,所以,JB3,就成为了一个监听器对象。,上面的例子只是发生一种事件,如果在程序中有多个事件发生怎么办呢?可使用多个事件接口,然后实现各自的事件处理方法。看下面的例子。,例,8.18,在窗口中用鼠标拖动画线。运行结果如图所示(见课本,P176,)。,实现多个接口,4,实现多个事件接口的方式,8.6.4,事件适配器类与内部类,1.,事件适配器类,在例,8
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:第8章-图形用户界面.ppt
    链接地址:https://www.zixin.com.cn/doc/12784390.html
    页脚通栏广告

    Copyright ©2010-2025   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork