Java程序设计-用户界面开发

上传人:小*** 文档编号:242970701 上传时间:2024-09-13 格式:PPT 页数:94 大小:1.29MB
返回 下载 相关 举报
Java程序设计-用户界面开发_第1页
第1页 / 共94页
Java程序设计-用户界面开发_第2页
第2页 / 共94页
Java程序设计-用户界面开发_第3页
第3页 / 共94页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Java,程序设计,第,16,章,用户界面开发,安全防护教研室:孙 璐,学习目标,利用,JFrame,创建可定制的应用程序主窗口,理解组件和容器的差异,区别顶级容器和中间容器的作用,能够灵活应用布局管理器组织界面,如何向容器中添加和布局组件,理解事件机制,掌握各类监听器的创建、注册和处理,掌握基本的图形处理程序开发,Java,的,GUI,图形用户界面(,Graphics User Interface,,简称,GUI,)是指以图形的方式实现人与计算机之间的交互。在该界面下用户往往只需通过单击、双击、拖曳鼠标和简单的文字键入就可以轻松地操作计算机完成任务。图形用户界面生动形象、操作直观简便。,目前,Java,主要提供了两个处理图形用户界面的类库:,java.awt,和,javax.swing,。其中均包含了用于设计图形用户界面的各种组件、布局管理器和事件类,.,AWT,:抽象窗口工具集(,Abstract Windows Toolkit,),由于,Java,代码可以在不同的系统平台运行,而不同平台的图形界面外观设计各有差异,所以,Java,程序的图形用户界面在不同的平台上可能出现不同的运行效果,其外观取决于具体的平台,所以称,AWT,是一个抽象的工具集。,Java,的,GUI,Swing,:,Swing,是在,AWT,的基础上构建的,提供了比标准,AWT,组件更强大和灵活的功能。与,AWT,组件不同的是,,Swing,组件不是由特定的平台代码实现,而是纯粹的,Java,代码,因此能够实现与平台的无关(此类组件一般被称为轻量级组件)。,Swing,类提供了,GUI,编程较为通用的部分,被统称为,Java Foundation Classes,(,Java,语言基础类,简称,JFC,)。,Java,的,GUI,Swing,包简介,JDK1.2,以后支持,javax.swing,包,Swing,包在图形界面设计上比,AWT,更丰富,更美观。,Swing,拥有,4,倍于,AWT,的用户界面组件。,是,AWT,包基础上的扩展,在很多情况下在,AWT,包的部件前加上字母,J,即为,Swing,部件的名称,如:,JFrame,、,JApplet,、,JButton,等。,Swing,包简介,(,续),Swing,部件都是,AWT,的,Container,类的直接子类或间接子类,Swing,与,AWT,的事件处理机制相同。处理,Swing,中的事件一般仍用,java.awt.event,包,但有的要用到,javax.swing.event,包。,Swing,比,AWT,部件具有更强的实用性。,设置边框,使用图标(,Icon,),提示信息,使用,AWT(Abstract Window Toolkit),组件,Component,类,java.awt,包中最,核心的类就是,Component,类,它是构成,Java,图形用户界面的基础,大部分组件都是由该类派生出来的。,Component,类是一个抽象类,其中定义了组件所具有的一般功能:基本的绘画支持,(,paint, repaint, update,等,),、字体和颜色等外形控制,(,setFont,SetForeground,等,),、大小和位置控制,(,SetSize,SetLocation,等,),、图象处理,(,实现接口,ImageObserver,),以及组件状态控制,(,SetEnable,isEnable,isVisible,isValid,等,),,,。,常见的组件包括:,Button, Checkbox,CheckboxGroup, Choice, Label, List, Canvas,TextComponent, Scrollbar,等。,使用,AWT(Abstract Window Toolkit),组件,Container,类,Container,类是由,Component,类派生出来的一种特殊类,用来表示各种,GUI,组件的容器,其主要功能包括:,组件的管理:方法,add(),可以向其中添加一个组件,,remove(),删除其中的一个组件,,布局管理:每个,Container,类都和一个布局管理器相联,以确定其中组件的布局。,Container,类可以通过,setLayout,(),方法设置某种布局方式。,常见的,Container,类有:,Frame, Panel, Applet,等。,使用,AWT(Abstract Window Toolkit),组件,菜单类,菜单类也是一种组件,只不过菜单类并不是由一般的,Component,类派生的,而是从,MenuComponent,类继承得到的。,使用,AWT(Abstract Window Toolkit),组件,JFrame,的继承层次,Swing,类结构图,Swing,组件的体系结构,基本组件,Component,容器,Container,Swing,组件的分类,组件,(Component),代表一种可以显示在屏幕上的图形元素,也是一种能与用户进行交互的,Java,对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。,容器,(Container),容器类继承于,Component,类,其本身及其子类可以容纳其他组件,组件从功能上分为:容器和基本组件,Swing,组件的分类,容器又分为顶层容器和中间层容器。,顶层容器:,JFrame,、,JDialog,、,JApplet,、,JWindow,。用于构造图形用户界面的窗口,并容纳其它容器和组件,它们可以独立存在 。,中间层容器 :,JPanel,、,JScrollPane,、,JToolBar,、,JTabbedPane,等。容纳其它组件,但是不能独立存在,需要添加到其它容器中。通常用来按功能组织基本组件 。,基本组件:按钮,JButton,、文本框,JTextField,、,JList,、,JMenu,等等。是图形用户界面的基本组成单位,不能独立存在,必须将其添加到一定的容器中。,不可编辑信息的显示:向用户显示不可编辑信息的部件,如,JLabel,、,JProgressBar,和,JToolTip,。,可编辑信息的显示:向用户显示能被编辑的格式化信息的部件,如,JColorChooser,、,JFileChoose,、,JTable,和,JTextArea,。,Swing,组件的分类,顶层容器与窗口,每一个,Java,的,GUI,程序都必须至少包含一个顶层容器组件作为窗口;,Swing,中最常用的顶层容器类,JFrame,:,用它创建的框架窗口可以独立存在,并且带有边框、标题及用于关闭和最大化,/,最小化窗口的图标按钮 。,创建第一个,Swing,窗口,import,javax.swing.JFrame,;,public class,MyFirstSwingApp,extends,JFrame,public,MyFirstSwingApp(String,title,int,width,int,height) ,super(title,);/,调用父类构造方法,同时设置窗口标题,/,设置窗口的显示尺寸,this.setSize(width, height);,/,设置窗口的关闭动作为关闭整个程序,this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE,);,/,一般在构造方法中组织自己的主界面显示,DO_NOTHING_ON_CLOSE,HIDE_ON_CLOSE,DISPOSE_ON_CLOSE,EXIT_ON_CLOSE,创建一个框架窗口,import,javax.swing,.*;,public class,JFrameDemo,extends,JFrame,public,JFrameDemo,(),super(“JFrame,窗口,”);,setBounds(50,50,300,120);,setDefaultCloseOperation(EXIT_ON_CLOSE,);,setVisible(true,);,public static void,main(String,args,) ,JFrameDemo,f,= new,JFrameDemo,();,创建第一个,Swing,窗口,import,javax.swing,.*;,public class,FirstSwingApp,public static void,main(String,args,) ,/,创建一个顶层容器并设置其标题为,FirstSwingApp,。,JFrame,frame = new,JFrame(FirstSwingApp,);,frame.add(new,JButton(“OK,“);/,向窗口中增加一个按钮,/,设置窗口中右上角的关闭按钮图标的缺省操作事件是关闭程序,frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE,);,frame.setSize(600, 400);/,设置窗口对象的尺寸,/,让窗口对象自行决定以最合适的方式显示窗口,并不依赖前面的定义尺寸,frame.pack,();,frame.setVisible(true,);/,最后,让窗口对象可见,JFrame,JFrame,组件用于在,Swing,程序中创建窗体,是放置其他,Swing,组件的顶级容器,它的构造函数:,JFrame,(),JFrame(String,Title),缺省的布局管理器是,BoderLayout,添加组件到内容窗格,两种方法,示例:,frame.getContentPane().add(new,JButton(,“,button,”,);,frame.add(new,JButton(,“,button,”,);,JFrame,类常用的方法,void,setLayout,(LayoutManager,manager),viod,add,(Component,comp),void,setBounds,(int,x,int,y,int,width,int,height),void,setTitle,(String,title),void,setVisible,(Boolean,b),void,setSize,(,int,width,int,height),void pack ( ),void remove (Component c),Container,getContentPane,(),setDefaultCloseOperation,(,int,operation,),所列出的大部分方法也适用于其它容器和组件,JFrame,包含一个,JRootPane,作为其惟一的子容器,用来管理其所有内容,包括:,内容窗格,(content pane),菜单,分层窗格,(layered pane),玻璃窗格,(glass pane),大部分情况下,我们只使用内容窗格,JFrame,Swing GUI,框架,你好,世界,菜单栏,顶级容器,GUI,组件,GUI,组件,内容窗格,添加组件到窗口,JFrame,对象的,getContentPane,(),方法返回一个对,contentPane,的引用,组件的基本功能,颜色设置,可以使用,setBackground,(),方法和,setForeground,(),来设置组件的背景色和前景色,btnOK.setBackground(Color.BLUE,);,边框设置,使用,setBorder,(),方法可以设置组件外围的边框,btnOK.setBorder(BorderFactory.createLineBorder(Color.RED,);,提示信息,:,使用,setTooltipText,(),方法,为组件设置对用户有帮助的提示信息,btnOK.setToolTipText(Hi,这是一个按钮,);,按钮,JButton,JButton,类允许用图标、字符串或两者同时构造一个按钮,JButton,() /,创建不带有设置文本或图标的按钮。,JButton(Icon,icon) /,创建一个带图标的按钮。,JButton(String,text) /,创建一个带文本的按钮。,JButton(String,text, Icon,icon,) /,创建一个带初始文本和图标的按钮。,ImageIcon,buttonIcon,= new,ImageIcon(on.gif,);,JButton,btnLogin,= new,JButton,(,登陆,(L),buttonIcon,);,btnLogin.setMnemonic(KeyEvent.VK_L,);,标签,JLabel,JLabel,对象可以显示文本、图像或同时显示二者,JLabel,(),JLabel(Icon,image),JLabel(Icon,image,int,horizontalAlignment,),JLabel(String,text),JLabel(String,text, Icon,icon,int,horizontalAlignment,),JLabel(String,text,int,horizontalAlignment)a,ImageIcon,icon = new,ImageIcon(on.gif,);,JLabel,lblUser,= new,JLabel,(,用户名,icon,SwingConstants.LEFT,);,SwingConstants,中定义的以下常量:,LEFT,、,CENTER,、,RIGHT,、,LEADING,或,TRAILING,,定义了组件的对齐方式,文本组件,文本组件,单行文本输入框,JTextField,JTextField,(),JTextField(Document,doc, String text,int,columns),JTextField(int,columns),JTextField(String,text),JTextField(String,text,int,columns),其他主要方法,public String,getText,() /,获取组件包含的文本,public String,getText(int,offs,int,len,)/,获取组件包含的文本部分,(,有偏移量和长度决定,),public String,getSelectedText,() /,返回此,TextComponent,中包含的选定文本,文本组件,多行纯文本编辑框,JTextArea,JTextArea,(),JTextArea(int,rows,int,columns),JTextArea(String,text),JTextArea(String,text,int,rows,int,columns),密码输入框,JPasswordField,JPasswordField,(),JPasswordField(int,columns),JPasswordField(String,text),JPasswordField(String,text,int,columns),设置输入字符的回显字符的方法是:,public void,setEchoChar(char,c),选择性输入组件,JCheckBox,复选框是一个可以被选定和取消选定的项,它将其选择状态显示给用户。,JCheckBox,(),JCheckBox(Icon,icon),JCheckBox(Icon,icon,boolean,selected),JCheckBox(String,text),JCheckBox(String,text,boolean,selected),JCheckBox(String,text, Icon,icon,),JCheckBox(String,text, Icon,icon,boolean,selected),判断一个复选框是否被选中的方法是,public,boolean,isSelected,(),选择性输入组件,JRadioButton,RadioButton,实现一个单选按钮,一般和,ButtonGroup,对象结合,实现多中选一的目标。,JRadioButton,rdb1=new JRadioButton(rdb1);,JRadioButton,rdb2=new JRadioButton(rdb2);,JRadioButton,rdb3=new JRadioButton(rdb3);,/,下面将三个按钮加入到一个组中,而剩余两个没有加入,ButtonGroup,bg,=new,ButtonGroup,();,bg.add(rdb1);,bg.add(rdb2);,bg.add(rdb3);,JRadioButton,rdb4=new JRadioButton(rdb4);,ButtonGroup,只是对,JRadioButton,进行了逻辑分组,本身不是一个组件类,添加菜单到窗口,菜单栏并不被添加到内容窗格中,而是有自己的固定位置,因此,添加菜单到窗口有自己的方法。,首先,创建一个,JMenuBar,菜单栏对象,将创建的菜单,JMenu,对象按顺序追加到,JMenuBar,对象中,,而菜单项,JMenuItem,则一个个按顺序追加到对应的,JMenu,对象中,,最后将,JMenuBar,对象设置为当前窗口的菜单栏。,JMenuBar,mnubar,=new,JMenuBar,();,JMenu,mnuFirst,=new,JMenu,(,文件,);,mnubar.add(mnuFirst,);,JMenuItem,itmAdd,= new,JMenuItem,(,添加,);,mnuFirst.add(itmAdd,);,mnuFirst.addSeparator,();/,增加菜单分隔符,JMenuItem,itmExit,= new,JMenuItem,(,退出,(E);,mnuFirst.add(itmExit,);,itmExit.setMnemonic(KeyEvent.VK_E,);,itmExit.setAccelerator(KeyStroke.getKeyStroke,(,KeyEvent.VK_E,InputEvent.CTRL_DOWN_MASK,);,JMenu,mnuSecpmd,=new,JMenu(Help,);,mnubar.add(mnuSecpmd,);,/,将,mnuBar,设置为当前窗口的菜单栏对象,this.setJMenuBar(mnubar,);,0,1,2,4,3,5,3,0,1,5,2,4,外观的管理与控制,用户确实需要自己设置组件的大小和位置,则应取消该容器的布局管理器,方法为:,setLayout(null,),但用户必须使用,setLocation,(),setSize,(),setBounds,(),等方法为组件设置大小和位置,不过程序将系统相关。,外观的管理与控制,为了使生成的图形用户界面具有良好的平台无关性,,Java,语言提供了布局管理器来管理组件在容器中的布局,而不使用直接设置组件的位置和大小的方式。每个容器都要一个布局管理器,容器中组件的定位都由它来决定。当容器需要对某个组件进行定位时,就会调用其对应的布局管理器。,this.setContentPane(new,JPanel,();,外观的管理与控制,在程序中安排组件的位置和大小时,应注意:,容器中布局管理器负责各组件的大小和位置,用户无法在这种情况下设置组件的这些属性,如试图调用,setLocation,(),setSize,(),setBounds,(),等。,外观的管理与控制,布局管理器,布局管理器,是,java.awt,包中提供的专门用于设置容器中组件排列方式的类,常用的有,BorderLayout,、,FlowLayout,、,GridLayout,、,BoxLayout,、,CardLayout,几种。每一种容器都有一个默认的布局管理器,通过,setLayout,方法可以改变容器的布局方式。,边界布局举例,public class,BorLayDemo,extends,JFrame,private,JButton,myButton1,myButton2,myButton3,myButton4,myButton5;,public,BorLayDemo,(),super(,边界布局,);,setBounds(50,50,300,120);,setLayout(new,BorderLayout,();,/,设置窗口为边界布局,setDefaultCloseOperation(,EXIT_ON_CLOSE,);,setVisible(true,);,myButton1=new,JButton,(,东边按钮,);,myButton2=new,JButton,(,南边按钮,);,myButton3=new,JButton,(,西边按钮,);,myButton4=new,JButton,(,北边按钮,);,myButton5=new,JButton,(,中间按钮,);,add(East,myButton1); /,添加按钮到窗口指定方位,add(South,myButton2);add(West,myButton3);,add(North,myButton4);add(Center,myButton5);,public static void,main(String,args,) ,BorLayDemo,f = new,BorLayDemo,();,FlowLayout,FlowLayout,布局方式是将组件一排一排地依次放置,它自动调用组件的,getPreferredSize,(),方法,使用组件的最佳尺寸来显示组件。,当容器被重新设置大小后,则布局也会随之发生改变:各组件的大小不变,但相对位置会发生变化。它是,JPanel,的默认布局。,构造方法,FlowLayout,(),/,居中对齐,默认的水平和垂直间隙是,5,个单位。,FlowLayout(int,align),/,它具有指定的对齐方式(,FlowLayout,类声明的三个类常量,LEFT,,,RIGHT,,,CENTER,),默认的水平和垂直间隙是,5,个单位。,FlowLayout(int,align,int,hgap,int,vgap,),/,创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。,流式布局举例,public class,FlowLayDemo,extends,JFrame,private,JButton,myButton1,myButton2,myButton3,myButton4,myButton5;,public,FlowLayDemo,() /,FlowLayDemo,类的构造方法,super(,流式布局,);,setBounds(50,50,300,120);,setLayout(new,FlowLayout,();,/,设置窗口为流式布局,setDefaultCloseOperation(,EXIT_ON_CLOSE,);,setVisible(true,);,myButton1=new,JButton,(,第一个按钮,); /,生成按钮对象,myButton2=new,JButton,(,第二个按钮,);,myButton3=new,JButton,(,第三个按钮,);,myButton4=new,JButton,(,第四个按钮,);,myButton5=new,JButton,(,第五个按钮,);,add(myButton1); /,添加按钮到窗口上图,7.4(a),流式布局,add(myButton2);add(myButton3);,add(myButton4);add(myButton5);,public static void,main(String,args,) ,FlowLayDemo,f=new,FlowLayDemo,(); ,BoxLayout,BoxLayout,允许垂直或水平布置多个组件的布局管理器。,构造方法:,public,BoxLayout(Container,target,int,axis),/,创建一个水平排列组件的,Box,容器,Box,hbox,=,Box.createHorizontalBox,();,/,创建一个垂直排列组件的,Box,容器,Box,vbox,=Box .,createVerticalBox,();,/,将组件加入,Box,的容器中的方法如下面的语句:,hbox.add(new,JButton(button1);,hbox.add(new,JButton(button2);,调整,Box,内部组件间的间隔,用,Box,的类方法,createRigidArea,(),在组件间添加空白,hbox.add(new,JButton(button1);/,追加一个按钮到,Box,容器中,hbox.add(Box.createRigidArea(new,Dimension(20,0);,hbox.add(new,JButton(button2);,Box,还可以用类方法,createHorizontalGlue,(),创建自动占据剩余空间的水平透明组件(同样还有垂直组件),如果有多个,Glue,组件,则它们平分一个方向上的剩余空间定义自己的尺寸。,还可以用类方法,createHorizontalStrut(30),创建有固定尺寸的的透明组件,GridLayout,GridLayout,布局方式可以使容器中的各组件呈网格状分布。容器中各组件的高度和宽度相同,当容器的尺寸发生变化时,各组件的相对位置不变,但各自的尺寸会发生变化。,GridLayout,的构造方法如下:,GridLayout,()/,创建具有默认值的网格布局,即每个组件占据一行一列。,GridLayout(int,rows,int,cols) /,创建具有指定行数和列数的网格布局。,GridLayout(int,rows,int,cols,int,hgap,int,vgap,) /,创建具有指定行数和列数的网格布局,此外,将水平和垂直间距设置为指定值。,网格布局举例,public class,GridLayDemo,extends,JFrame,private String names=,按钮,1,按钮,2,按钮,3,按钮,4,按钮,5,按钮,6;,public,GridLayDemo,(),super(,网格布局,);,setBounds(50,50,300,120);,setLayout(new,GridLayout(3,3);,/,设置三行三列网格布局,setDefaultCloseOperation(,EXIT_ON_CLOSE,);,setVisible(true,);,for (,int,i=0;i number),提示条,.,setText,(,猜大了!,);,输入框,.,setText(null,);,else if (guess number) ,提示条,.,setText,(,猜小了!,);,输入框,.,setText(null,);, catch (,NumberFormatException,event) ,提示条,.,setText,(,请输入数字字符,);,public class ep6_13 ,public static void,main(String,args,) ,WindowButton,win = new,WindowButton,(,窗口,);,对话框,和利用中间容器组织界面不同,,Java,提供了一类特殊的窗口编程,就是对话框编程。,对话框可以显示在另一个窗口即父窗口的范围内,使用对话框可以在不切换原有视图内容的情况下和用户交互,例如简单的输入、操作确认等。,16.7.1,选项对话框,JOptionPane,弹出要求用户提供输入值或向其发出通知的标准对话框。,public void,actionPerformed(ActionEvent,e) ,JOptionPane.showConfirmDialog(null,您确认删除这条信息吗?,操作提示,JOptionPane.YES_NO_OPTION,);,JOptionPane,确认对话框,showConfirmDialog,信息告知对话框,showMessageDialog,选项对话框,showOptionDialog,提示要求某些输入,showInputDialog,16.6.2,文件对话框,JFileChooser,为用户选择文件提供了一种简单的机制,通过它可以获得用户选择的文件信息,如位置和文件名等,进而可以利用前面介绍的,I/O,编程的知识实现文件的处理。,public void,actionPerformed(ActionEvent,e) ,JFileChooser,chooser = new,JFileChooser,();,/,创建了一个文件名过滤器,文件类型参数是一个变长的参数类型,FileNameExtensionFilter,filter = new,FileNameExtensionFilter,(,JPG ,chooser.setFileFilter(filter,);,/return,保存了用户选择按钮的情况,int,returnVal,=,chooser.showOpenDialog(this,);,/,利用,getSelectedFile,方法返回一个,File,对象表示用户选中的文件,if (,returnVal,=,JFileChooser.APPROVE_OPTION,) ,System.out.println,(,被选择的文件是,: “,+,chooser.getSelectedFile().getName,(),);,16.7.3,自定义对话框,可以通过继承,JDialog,创建一个自定义的对话框,满足程序特定的需要。创建一个对话框重点需要确定以下几个问题:,满足应用需要的组件搭配和屏幕布局,这个过程和前面讲述的窗口和容器的处理一致。,如何向使用者返回必要的信息,包括用户所需的结果和关闭对话框的方式等等。,16.8,图形编程基础,组件的显示,每个组件知道应该如何显示自己,这是因为每个组件都有一个,paint,的方法,当组件需要显示时,运行时环境会调用它。,paint,的方法包括一个参数,,Graphics,类型的实例,,Swing,应用程序不应直接调用,paint,,而是应该使用,paintComponent,方法来安排重绘组件,该方法可以重载。,protected void,paintComponent(Graphics,g),图形环境,Java,应用程序绘图需要一个类型为,Graphics2D,(继承于早期版本提供的,Graphics,类)的对象,通常称这个对象为图形设备上下文,它提供了在屏幕上绘图的独立于平台的接口,可以使用它绘制直线、各类几何图形等。,组件中的坐标系,Graphics,绘图时的用户坐标系统采用像素作为单位,其原点(,0,,,0,)坐标缺省在左上角,,Graphics2D,对象会自动的将组件的用户坐标映射到具体的设备坐标,如打印机,屏幕等。,颜色,绘图时用的特殊颜色可以使用,Color,对象。颜色有红、绿、蓝三原色构成,每个原色分量的亮度值都是一个,byte,值表示,从,0,到,255,(最亮)。例如创建一个,Color,对象的语法是:,Color c = new,Color(r,g,b,);,例如,更改当前绘图颜色时,可以使用类似下面的代码行:,g.setPaint(Color.RED);/g,是图形设备上下文,Graphics2D,的实例,字体,通常使用,Font,和,FontMetrics,来完成所绘图形的文字效果设置。,Font,对象可以用来设置组件和绘制时的字体,而,FontMetrics,用来计算字符串的精确长度和宽度。,画笔,Stroke,接口允许,Graphics2D,对象获得一个,Shape,,该,Shape,是指定,Shape,的装饰轮廓,或该轮廓的风格表示形式。例如最简单的可以设置绘图时使用的线宽,如下面代码段:,Stroke,stroke,= new BasicStroke(4);,public class,DrawPanel,extends,JPanel,implements,MouseListener,Point,lastLocation,; /,保存上一次的点击位置,public void,mouseClicked(MouseEvent,e) ,/,获得当前环境的图形设备,Graphics2D g = (Graphics2D),this.getGraphics,();,if (,lastLocation,!= null) /,此分支用于清除上次的绘图,Color,bg,=,g.getBackground,(); /,获得当前的背景色,g.setColor(bg,);,/,用背景色在原来的位置重新绘制,以达到清除图形的目的,g.fillRect(lastLocation.x,lastLocation.y, 101, 101);,Point p =,e.getPoint,();,g.setPaint(Color.RED,);,g.drawOval(p.x,p.y, 100, 100);,g.setFont(new,Font(“,宋体,”,Font.BOLD, 10); /,设置新字体,g.drawString(Oval,p.x,+ 50,p.y,+ 50); /,lastLocation,= p;/,记录此次的绘图位置,常,用,GUI,标准组件,11.3,常用,GUI,部件,Component,类,(,抽象类),Color,getBackground,() :,获取部件的背景色,Font,getFont,() :,获取部件的显示字体,Graphics,getGraphics,():,获取部件的,Graphics,属性对象,void,repaint(int,x,int,y,int,width,int,height) :,对部件的特定区域进行重新绘图,void,setBackground(Color,c) :,设置部件的背景,void,setEnabled(boolean,b) :,是否让部件功能有效,void,setFont(Font,f) :,设置部件的显示字体,void,setSize(int,width,int,height) :,设置部件大小,void,setVisible(boolean,b) :,设置部件是否可见,void,setForeground(Color,c) :,设置部件的前景色,void,requestFocus,() :,让部件得到焦点,void,add(PopupMenu,popup),:给部件加入弹出菜单,常,用,GUI,标准组件,4,、事件与事件处理,所谓事件,就是发生在用户界面上的用户交互行为而产生的一种效果,如鼠标的各种动作、键盘的操作以及发生在组件上的各种动作,因此事件一般也分为三种类型:键盘事件、鼠标事件以及组件的动作事件(对鼠标或键盘事件在一定程度上进行了封装)。,每发生一个事件,程序都需要作出相应的响应,这称为事件处理。在,JDK1.0,和,1.1,中,事件表示以及事件的处理是采用不同的方式来完成的。,4,、事件与事件处理,JDK1.0,的事件处理,在,JDK1.0,中,所有事件都封装在一个单一的类,java.awt.Event,中,该类是从,java.lang.Object,直接继承而来。在,Event,中,提供了各种常量和变量来描述事件,包括事件的类型、事件的产生者、事件的内容、事件相关信息等,同时也提供了相关的方法来进一步获取事件相关信息。,例如,为了区分事件类型,需要用其事件分类标志变量,id,来判断事件是否属于动作事件:,if(,Ev.id,= ACTION_EVENT ),Event,Object arg,int clickCount,int id,int key,int modifiers,Object target,int x,int y,long when,Event,类的变量属性,4,、事件与事件处理,JDK1.0,的事件处理,Event,类的变量属性,事件类型:如,ACTION_EVENT,、,KEY_ACTION,、,MOUSE_DOWN,、,MOUSE_ENTER,、,WINDOW_DISTORY,等。,键值:如,F1,、,DELETE,、,DOWN,、,ESCAPE,等。,4,、事件与事件处理,JDK1.0,的事件处理,在,JDK 1.0,中,是采用一种叫做事件传递的机制来处理发生在用户界面上的事件。,在,AWT,组件中,都从,Component,中继承了与事件处理有关的方法:,action(Event e, Object,arg,),:,处理动作事件,handleEvent(Event,e),:,处理低级键盘事件和鼠标事件,每个组件都可以用上述方法处理发生在自己上面的事件,同时,也可以不作处理,而是交给包含它的容器去处理,并且可以一层一层往上传递,直到最顶层容器。不论哪种方法,都需要继承已有的,AWT,组件,生成其子类,在子类中重写上述方法来对事件进行处理。,4,、事件与事件处理,JDK1.0,的事件处理,Event,HandleEvent(),MouseUp(),
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


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

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


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