java中 基于Swing的图形用户界面设计

上传人:da****ge 文档编号:243098238 上传时间:2024-09-15 格式:PPT 页数:93 大小:1.86MB
返回 下载 相关 举报
java中 基于Swing的图形用户界面设计_第1页
第1页 / 共93页
java中 基于Swing的图形用户界面设计_第2页
第2页 / 共93页
java中 基于Swing的图形用户界面设计_第3页
第3页 / 共93页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,2024/9/15,1,第,10,章 基于,Swing,的图形用户界面设计,本章导读,AWT,组件与,SWING,组件,JFrame,窗体、菜单组件、布局设计,中间容器、文本组件,按钮与标签组件、复选框与单选按钮组件,列表组件、表格组件、树组件和进度条组件,窗口事件、鼠标事件、焦点事件和键盘事件,对话框,AWT,线程与计时器,MVC,设计模式,发布应用程序,2024/9/15,2,10.1 AWT,组件与,SWING,组件概述,Java,早期进行用户界面设计时,,使用,java.awt,包中提供的类,。,“,AWT,”,就是,Abstrac Window Toolkit,(抽象窗口工具包)的缩写。,Java 2,(,JDK1.2,)推出之后,增加了一个,新的,javax.swing,包,,该包提供了功能更为强大的用来设计,GUI,界面的类。,Java,早期的,java.awt,包中的类创建的组件习惯上称为重组件。例如,当用,java.awt,包中的,Button,类创建一个按钮组件时,都有一个相应的本地组件在为它工作(称为它的同位体)。,javax.swing,包为我们提供了更加丰富的、功能强大的组件,称为,SWING,组件,其中,大部分组件是轻组件,,没有同位体。,SWING,组件的轻组件在设计上和,AWT,完全不同,轻组件把与显示组件有关的许多工作和处理组件事件的工作交给相应的,UI,代表来完成。这些,UI,代表是用,Java,语言编写的类,这些类被增加到,Java,的运行环境中,因此组件的外观不依赖平台,不仅在不同平台上的外观是相同的,而且较组件有更高的性能。如果,Java,运行环境低于,1.2,版本,就不能运行含有,SWING,组件的程序。,2024/9/15,3,图,10.1 JComponent,类的部分子类以及,JFrame,类和,JDialog,类,2024/9/15,4,容器类(,Container,)和组件类(,Component,),Java,把由,Component,类的子类或间接子类创建的对象称为一个组件,;,把由,Container,的子类或间接子类创建的对象称为一个容器。,可以向容器添加组件。,Container,类提供了一个,public,方法,add(),,一个容器可以调用这个方法将组件添加到该容器中。,调用,removeAll(),方法可以移掉容器中的全部组件,调用,remove(Component c),方法可以移掉容器中参数指定的组件。,每当容器添加新的组件或移掉组件时,应该让容器调用,validate(),方法,以保证容器中的组件能正确显示出来。,容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。,javax.swing,包中有,4,个最重要的类,JApplet,,,JFrame,,,JDialog,和,JComponent,。,注:,JComponent,类的子类都是轻组件,,JComponent,类是,java.awt,包中,Container,类的子类,因此所有的轻组件也都是容器。,而,JFrame,、,JApplet,、,JDialog,都是重组件,即有同位体的组件,这样窗口(,JFrame,)、对话框(,JDialog,)、小应用程序(,Java Applet,)可以和操作系统交互信息。轻组件必须在这些容器中绘制自己,习惯上称这些容器为,SWING,的底层容器。,2024/9/15,5,10.2 JFrame,窗体,javax.swing,包中的,JFrame,类是,java.awt,包中,Frame,类的子类,因此,JFrame,类其子类创建的对象是窗体。,当应用程序需要一个窗口时,可使用,JFrame,或其子类创建一个对象。窗口默认地被系统添加到显示器屏幕上,因此不允许将一个窗口添加到另一个容器中。,Frame,类常用方法如下:,JFrame(),创建一个无标题的窗口。,JFrame(String s),创建一个标题为,s,的窗口。,public void setBounds(int a,int b,int width,int height),设置出现在屏幕上时的初始位置为,(a,b),,即距屏幕左面,a,个像素、距屏幕上方,b,个像素;窗口的宽是,width,,高是,height,。,public void setSize(int width,int height),设置窗口的大小,在屏幕出现默认位置是,(0,0),。,public void setVisible(boolean b),设置窗口是可见还是不可见,窗口默认是不可见的。,public void setResizable(boolean b),设置窗口是否可调整大小,窗口默认是可调整大小的。,public void setDefaultCloseOperation(int operation),该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。其中的,参数,operation,取下列有效值:,1) DO_NOTHING_ON_CLOSE,什么也不做,2)HIDE_ON_CLOSE,隐藏当前窗口,3)DISPOSE_ON_CLOSE,隐藏当前窗口,并释放窗体占有的其他资源,4)EXIT_ON_CLOSE,结束窗体所在的应用程序,这,4,个常量都是,JFrame,类中的,static,常量,单击关闭图标后,程序根据,operation,取值做出不同的处理。,例子,10-1,用,JFrame,创建了两个窗口,程序运行效果如图,10.2,。,2024/9/15,6,例子,10-1,运行效果图,10.2,2024/9/15,7,10.3,菜单组件,窗口中的菜单条、菜单、菜单项是我们所熟悉的界面,菜单条、菜单、菜单项是窗口常用的组件,菜单放在菜单条里,菜单项放在菜单里。,1,JMenuBar,菜单条,JComponent,类的子类,JMenuBar,是负责创建菜单条的,即,JMenuBar,的一个实例就是一个菜单条,。,JFrame,类有一个将菜单条放置到窗口中的方法:,public void setJMenuBar(JMenuBar menubar);,该方法将菜单条添加到窗口的菜单条区域(注意:只能向窗口添加一个菜单条)。,2024/9/15,8,2. JMenu,菜单,JComponent,类的子类,JMenu,类是负责创建菜单的,即,JMenu,的一个实例就是一个菜单。,JMenu,类的主要方法有以下几种:,JMenu(String s),建立一个指定标题菜单,标题由参数,s,确定,public void add(MenuItem item),向菜单增加由参数,item,指定的菜单选项对象。,public void add(String s),向菜单增加指定的选项。,public JMenuItem getItem(int n),得到指定索引处的菜单选项。,public int getItemCount(),得到菜单选项数目。,2024/9/15,9,3. JMenuItem,菜单项,JMenuItem,是,JMenu,的父类,该类是负责创建菜单项的,即,JMenuItem,的一个实例就是一个菜单项。菜单项放在菜单里。,JMenuItem,类的主要方法有以下几种:,JMenuItem(String s),构造有标题的菜单项。,JMenuItem(String text, Icon icon),构造有标题和图标的菜单项,public void setEnabled(boolean b),设置当前菜单项是否可被选择。,public String getLabel(),得到菜单项的名字。,public void setAccelerator(KeyStroke keyStroke),为菜单项设置快捷键。,为了向该方法的参数传递一个,KeyStroke,对象,,可以使用,KeyStroke,类,的类方法,public static KeyStroke getKeyStroke(char keyChar),返回一个,KeyStroke,对象,;也可以使用,KeyStroke,类的类,方法,public static KeyStroke getKeyStroke(int keyCode,int modifiers),返回一个,KeyStroke,对象,,其中参数,keyCode,取值范围为,KeyEvent.VK_A,KeyEvent.VK_Z,,,modifiers,的取值如下:,InputEvent.ALT_MASK,,,InputEvent.CTRL_MASK,和,InputEvent.SHIFT_MASK,。,2024/9/15,10,4.,嵌入子菜单,JMenu,是,JMenuItem,的子类,因此菜单项本身还可以是一个菜单,这样的菜单项称为子菜单。,为了使得菜单项有一个图标,可以用,图标类,Icon,声明一个图标,然后使用其子类,ImageIcon,类,创建一个图标,如,Icon icon=new ImageIcon(dog.gif );,下面的,例,10-2,中有一个含有菜单的窗口(效果如图,10.3,所示)。,2024/9/15,11,10.4,布局设计,当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。,本节将介绍,java.awt,包,中的,FlowLayout,、,BorderLayout,、,CardLayout,、,GridLayout,布局类和,java.swing.border,包中的,BoxLayout,布局类。,容器可以使用方法,setLayout(,布局对象,),;,来设置自己的布局。,对于,JFrame,窗口,默认布局是,BorderLayout,布局。,2024/9/15,12,1,FlowLayout,布局,FlowLayout,类的对象称为,FlowLayout,布局。,FlowLayout,类的一个常用构造方法如下:,FlowLayout();,构造方法可以创建一个居中对齐的布局对象,如,:,FlowLayout flow=new FlowLayout();,con.setLayout(flow);,容器,con,使用,flow,这个布局对象,容器,con,可以使用,Container,类,提供的,add(),方法,将组件顺序地添加到容器中。,FlowLayout,布局对象调用,setAlignment(int aligin),方法,可以重新设置布局的对齐方式,其中,aligin,可以取值,FlowLayout.LEFT,、,FlowLayout.CENTER,或,FlowLayout.RIGHT,。,FlowLayout,布局对象调用,setHgap(int hgap),方法,和,setVgap(int vgap),方法,可以重新设置布局的水平间隙和垂直间隙。,如果需要改变最佳大小,组件需调用:,public void setPreferredSize(Dimension preferredSize),设置大小,例如:,button.setPreferredSize(new Dimension(20,20);,注:,对于添加到使用,FlowLayout,布局的容器中的组件,组件调用,setSize(int x,int y),设置的大小无效。,例,10-3,中,,,JFrame,使用,FlowLayout,布局放置,10,个组件(效果如图,10.4,所示)。,2024/9/15,13,例子,10-3,运行效果图,10.4,2024/9/15,14,2,BorderLayout,布局,BorderLayout,布局,是,Window,容器,的默认布局。,JFrame,、,JDialog,都是,Window,类的间接子类,它们的内容面板的默认布局都是,BorderLayout,布局。,如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由,BorderLayout,中的,静态常量,CENTER,、,NORTH,、,SOUTH,、,WEST,、,EAST,表示。例如,一个使用,BorderLayout,布局,的,容器,con,可以使用,add(),方法,将一个组件,b,添加到中心区域:,con.add(b,BorderLayout.CENTER);,或,con.add(BorderLayour.CENTER,b);,注,:,添加到某个区域的组件将占据整个这个区域,.,每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换。,注,:,使用,BorderLayout,布局的容器最多能添加,5,个组件,如果容器中需要添加的组件超过,5,个,就必须使用容器的嵌套或改用其他布局策略。,例,10-4,使用了,BorderLayout,布局(效果如图,10.5,所示)。,2024/9/15,15,例子,10-4,运行效果图,10.5,2024/9/15,16,3,CardLayout,布局,使用,CardLayout,容器可以容纳多个组件,但同一时刻容器只能从这些组件中选出一个来显示,就像一叠,“,扑克牌,”,每次只能显示最上面的一张一样,这个被显示的组件将占据所有的容器空间。,JTabbedPane,窗格,的默认布局是,CardLayout,布局,,并且自带一些选项卡,这些选项卡与用户添加到,JTabbedPane,窗格中的组件相对应,单击该选项卡,,JTabbedPane,窗格,将显示对应的组件。选项卡窗格自带的选项卡默认地在该选项卡窗格的顶部,从左向右依次排列,选项卡的顺序和所对应的组件的顺序相同。,JTabbedPane,窗格,可以使用,add(String text,Component c);,方法将组件,c,添加到,JTabbedPane,窗格中,并指定和组件,c,对应的选项卡的文本提示是,text,。,使用,JTabbedPane,窗格,的构造方法,public JTabbedPane(int tabPlacement),创建的选项卡窗格的选项卡的位置由参数,tabPlacement,指定,该参数的有效值为,JTabbedPane.TOP,、,JTtabbedPane.BOTTOM,、,JTabbedPane.LEFT,和,JTabbedPane.RIGHT,。,例,10-5,在选项卡窗格中添加了,5,个按钮(带有图标),并设置了相对应的选项卡的文本提示,然后将选项卡窗格添加到窗体的内容面板中(效果如图,10.6,所示)。,2024/9/15,17,例子,10-5,运行效果图,10.6,2024/9/15,18,4,GridLayout,布局,GridLayout,是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行若干列的网格区域,组件就位于这些划分出来的小格中。,GridLayout,比较灵活,划分多少网格由程序自由控制,而且组件定位也比较精确,使用,GridLayout,布局编辑器的一般步骤如下:,(,1,)使用,GridLayout,的构造方法,GridLayout(int m,int n),创建布局对象,指定划分网格的行数,m,和列数,n,,如,GridLayout grid=new GridLayout(10,8);,(,2,)使用,GridLayout,布局,的容器调用,方法,add(),将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个,第一行最后一个、第二行第一个,最后一行第一个,最后一行最后一个。,使用,GridLayout,布局,的容器最多可添加,m,n,个组件,。,GridLayout,布局,中每个网格都是相同大小,并且强制组件与网格的大小相同。,由于,GridLayout,布局,中每个网格都是相同大小并且强制组件与网格的大小相同,使得容器中的每个组件也都是相同的大小,显得很不自然。为了克服这个缺点,可以使用容器嵌套。例如,一个容器使用,GridLayout,布局,,将容器分为三行一列的网格,那么可以把另一个容器添加到某个网格中,而添加的这个容器又可以设置为,GridLayout,布局、,FlowLayout,布局、,CarderLayout,布局或,BorderLayout,布局,等。利用这种嵌套方法,可以设计出符合一定需要的布局,.,2024/9/15,19,5,BoxLayout,布局,用,BoxLayout,类,可以创建一个布局对象,称为盒式布局。,BoxLayout,在,java.swing.border,包中。,java swing,包提供了,Box,类,该类也是,Container,类,的一个子类,创建的容器称为一个盒式容器。盒式容器的默认布局是盒式布局,而且不允许更改盒式容器的布局。因此,在策划程序的布局时,可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到布局目的。,BoxLayou,的构造方法,BoxLayout(Container con,,,int axis),可以创建一个盒式布局对象,并指定容器,con,使用该布局对象,参数,axis,的有效值是,BoxLayout.X_AXIS,和,BoxLayout.Y_AXIS,。,Box,类,的类(静态)方法,createHorizontalBox(),可以获得一个具有行型盒式布局的盒式容器;,Box,类,的类(静态)方法,createVerticalBox(),可以获得一个具有列型盒式布局的盒式容器。,控制盒式布局容器中组件之间的距离,需要使用水平支撑或垂直支撑。,Box,类,调用静态方法,createHorizontalStrut(int width),可以得到一个不可见的水平,Struct,类型对象,.,称为水平支撑,.,该水平支撑的高度为,0,宽度是,width,。,Box,类,调用静态方法,createVertialStrut(int height),可以得到一个不可见的垂直,Struct,类型对象,称为垂直支撑,.,参数,height,决定垂直支撑的高度,垂直支撑的宽度为,0,。,例,10-6,中,(效果如图,10.7,所示),有两个列型盒式容器,boxV1,、,boxV2,和一个行型盒式容器,baseBox,。在列型盒式容器的组件之间添加垂直支撑,控制组件之间的距离,将,boxV1,、,boxV2,添加到,baseBox,中,并在它们之间添加水平支撑。,2024/9/15,20,例子,10-6,运行效果图,10.7,2024/9/15,21,6,null,布局,可以把一个容器的布局设置为,null,布局(空布局)。,空布局容器可以准确地定位组件在容器的位置和大小。,setBounds(int a,int b,int width,int height),方法,是所有组件都拥有的一个方法,组件调用该方法可以设置本身的大小和在容器中的位置。例如,,p,是某个容器:,p.setLayout(null);,把,p,的布局设置为空布局。,向空布局的容器,p,添加一个组件,c,需要两个步骤。,首先,使用,add(c),方法,向容器添加组件,,然后,组件,c,再调用,setBounds(int a,int b,int width,int height),方法,设置该组件在容器中的位置和本身的大小。,组件都是一个矩形结构,方法中的参数,a,和,b,是被添加的组件,c,的左上角在容器中的位置坐标,即该组件距容器左面,a,个像素,距容器上方,b,个像素;,weidth,和,height,是组件,c,的宽和高。,2024/9/15,22,10.5,中间容器,_1,JPanel,面板,2JScrollPane,窗格,3JSplitPane,窗格,轻组件都是容器,但仍有一些经常用来添加组件的轻容器,相对于底层重容器而言,我们习惯上称这些轻容器为中间容器。,SWING,提供了许多功能各异的中间容器,而且容易学习掌握。本节将简单介绍,JPanel,面板、,JScrollPane,滚动窗格、,JSplitPane,拆分窗格和,JLayeredPane,分层窗格。,1,JPanel,面板,可以使用,JPanel,创建一个面板,再向这个面板添加组件,然后把这个面板添加到底层容器或其他中间容器中。,JPanel,面板的默认布局是,FlowLayout,布局,。,JPanel,类构造,方法,Jpanel(),可以构造一个面板容器对象。,2,JScrollPane,窗格,可以把一个组件放到一个滚动窗格中,然后通过滚动条来观察这个组件。,JScorollPane,的构造,方法,JScorollPane(component c),可以构造一个滚动窗格。,3,JSplitPane,窗格,拆分窗格有两种类型水平拆分和垂直拆分。水平拆分窗口用一条拆分线把容器分成左右两部分,左面放一个组件,右面放一个组件,拆分线可以水平移动。垂直拆分窗格由一条拆分线分成上下两部分,上面放一个组件,下面放一个组件,拆分线可以垂直移动。,JSplitPane,的构造,方法,JSplitPane(int a,Component b,Component c),可以构造一个拆分窗格,参数,a,取,JSplitPane,的静态常量,HORIZONTAL_SPLIT,或,VERTICAL_SPLIT,,以决定是水平还是垂直拆分。后两个参数决定要放置的组件。拆分窗格调用,setDividerLocation(double position),设置拆分线的位置。,2024/9/15,23,4,JLayeredPane,分层窗格,如果添加到容器中的组件经常需要处理重叠问题,就可以考虑将组件添加到,JLayeredPane,容器。,JLayeredPane,容器将容器分成,5,个层,容器使用,add(Jcomponent com, int layer);,添加组件,com,并指定,com,所在的层,其中参数,layer,取值,JLayeredPane,类,中的类常量:,DEFAULT_LAYER,、,PALETTE_LAYER,、,MODAL_LAYER,、,POPUP_LAYER,、,DRAG_LAYER,。,DEFAULT_LAYER,是最底层,添加到,DEFAULT_LAYER,层,的组件如果和其他层的组件发生重叠时,将被其他组件遮挡。,DRAG_LAYER,层,是最上面的层,如果,JLayeredPane,中添加了许多组件,鼠标移动一组件时,可以把移动的组件放到,DRAG_LAYER,层。这样,组件在移动过程中,就不会被其他组件遮挡。添加到同一层上的组件,如果发生重叠,先添加的会遮挡后添加的组件。,JLayeredPane,对象调用,public void setLayer(Component c,int layer),可以重新设置组件,c,所在的层,调用,public int getLayer(Component c),可以获取组件,c,所在的层数。,例,10-7,在,JLayeredPane,容器中添加了,5,个组件,分别位于不同的层上,(,效果如图,10.8,所示,),2024/9/15,24,例子,10-7,运行效果图,10.8,2024/9/15,25,10.6,文本组件,_,1 JTextField,文本框,2 JPasswordField,密码框,1,JTextField,文本框,JComponent,的子类,JTextField,是专门用来建立文本框的,即,JTextField,创建的一个对象就是一个文本框。用户可以在文本框输入单行的文本。,JTextField,类的主要方法如下:,JTextField(int x),创建文本框对象,可以在文本框中输入若干个字符,文本框的可见字符个数由参数,x,指定。,JTextField(String s),创建文本框对象,则文本框的初始字符串为,s,,可以在文本框中输入若干个字符。,public void setText(String s),设置文本框中的文本为参数,s,指定的文本,文本框中先前的文本将被清除。,public String getText(),获取文本框中的文本。,public void setEditable(boolean b),指定文本框的可编辑性。创建的文本框默认是可编辑的。,public void setHorizontalAlignment(int alignment),设置文本在文本框中的对齐方式,,alignment,的有效值为,JTextField.LEFT,、,JTextField.CENTER,和,JTextField.RIGHT,。,2,JPasswordField,密码框,使用,JTextField,的子类,JPasswordField,可以建立一个密码框对象。密码框可以使用,setEchoChar(char c),设置回显字符,(,默认的回显字符是,*),char,getPassword(),方法返回密码框中的密码。,2024/9/15,26,3,ActionEvent,事件,当用户在有输入焦点的文本框中按回车键、单击按钮、在一个下拉式列表中选择一个条目等操作时,都发生界面事件。程序有时要对发生的事件做出反应,来实现特定的任务。,在学习处理事件时,读者必须很好地掌握,事件源、监视器、处理事件的接口,这三个概念。,JTextField,和,JPasswordField,触发,ActionEvent,事件,,通过处理文本框这个具体的组件上的事件,来掌握处理事件的基本原理。,2024/9/15,27,3,ActionEvent,事件,_,处理事件的基本原理,1),事件源,:,能够产生事件的对象都可以称为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是,Java,认为能够发生,事件的对象。,2),监视器,:,我们需要一个对象对事件源进行监视,以便对发生的事件做出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。例如,对于文本框,这个方法是:,addActionListener(ActioListener listener),对于获取了监视器的文本框对象,在文本框获得输入焦点之后,如果用户按回车键,Java,运行系统就自动用,ActionEvent,类,创建了一个对象,即发生了,ActionEvent,事件,。也就是说,事件源获得监视器之后,相应的操作就会导致事件的发生,并通知监视器,监视器就会做出相应的处理。,3),处理事件的接口,:,发生,ActionEvent,事件的事件源对象获得监视器方法是:,addActionListener(ActionListener listener);,该方法中的参数是,ActionListener,类型的接口,因此必须将一个实现,ActionListener,接口,的类创建的对象传递给该方法的参数,使得该对象成为事件源的监视器。,监视器负责调用特定的方法处理事件,创建监视器的类必须提供处理事件的特定方法,即实现接口方法。,Java,采用接口回调技术来处理事件,当事件源发生事件时,接口立刻通知监视器自动调用实现的某个接口方法,接口方法规定了怎样处理事件的操作。,2024/9/15,28,3,ActionEvent,事件,_,事件处理模式图,10.9,接口回调这一过程对程序是不可见的,,Java,在设计组件事件时已经设置好了这一回调过程,程序只需让事件源获得正确的监视器,即将实现了正确接口的对象的引用传递给方法,addActionListener(ActionListener listener),中的参数,listener,。,我们称文本框和密码框事件源可以发生,ActionEvent,类型,事件。为了能监视到这种类型的事件,事件源必须使用,addActionListener(),方法,获得监视器;创建监视器的类必须实现,接口,ActionListener,。,事件处理模式如图,10.9,所示,.,2024/9/15,29,3,ActionEvent,事件,_,ActionEvent,类中的方法,4)ActionEvent,类中的方法,ActionEvent,事件,对象调用方法,public Object getSource(),可以返回发生,ActionEvent,事件,的对象的引用。,ActionEvent,事件对象调用方法,public String getActionCommand(),获取发生,ActionEvent,事件时,和该事件相关的一个命令字符串,对于文本框,当发生,ActionEvent,事件时,用户在文本框中输入的文本字符串就是和该事件相关的一个命令字符串。,例,10-8,中,窗口中有一个文本框,text,,,text,的事件监视器由,PoliceStation,类负责创建。当用户在,text,中输入字符串回车后,监视器负责在命令输出该字符串以及它的长度(效果如图,10.10,所示)。,例,10-9,中,,,titleText,和,passwordText,有监视器。当在,titleText,中输入字符串回车后,监视器负责将窗体的标题更改为当前,titleText,中的文本。当在,passwordText,中输入密码回车后,监视器负责将密码显示在,titleText,中,(,效果如图,10.11,所示,),。,例,10-10,使用匿名对象作为,inputText,的监视器,当在,inputText,中输入一个数字字符串后,监视器负责计算这个数的平方,并将结果放入,showText,中,(,效果如图,10.12,所示,),。,2024/9/15,30,例子,10-8,9,10,运行效果图,10.10,10.11,10.12,2024/9/15,31,4,菜单项上的,ActionEvent,事件,单击某个菜单项可以发生,ActionEvent,事件。菜单项使用,addActionListener(ActionListener listner),方法获得监视器。,2024/9/15,32,5,JTextArea,文本区,_1 JTextArea,常用方法,JTextArea,类专门用来建立文本区,用户可以在文本区输入多行的文本,.,JTextArea(int rows, int columns),构造一个可见行和可见列分别是,rows,和,columns,的文本区。,文本区对象可以使用下列方法,:,setLineWrap(boolean b),决定输入的文本能否在文本区的右边界自动换行;,setWrapStyleWord(boolean b),决定是以单词为界或以字符为界进行换行,(b,取,true/false),。,getText(),和,setText(String s),获取并替换文本区的文本,append(String s),尾加文本,insert(String s,int x),在文本区的指定位置处插入文本,replaceRange(String newString,int start,int end),将文本区,start,至,end,处的文本替换为新文本,newString,getCaretPosition(),获取文本区中输入光标的位置,setCaretPosition(int position),设置文本区中输入光标的置,(position,不能大于文本区中字符的个数,),copy(),和,cut(),方法,将文本区中选中的内容复制或剪切到系统的剪贴板,paste(),将系统剪贴板上的文本数据粘贴在文本区中。,setSelectionStart(int selectionStart),和,setSelectionEnd(int selectionEnd),方法,设置选中的文本,select(int selectionStart,int selectionEnd),和,selectAll(),选中部分或全部文本,例,10-11,中,单击菜单,“,编辑,”,中的相应菜单项将文本区中选中的内容剪切、复制到系统剪贴板或将系统剪贴板的内容粘贴到文本区,效果如图,10.13,所示,.,2024/9/15,33,例子,10-11,运行效果图,10.13,2024/9/15,34,5,JTextArea,文本区,_,2,文本区的,DucumentEvent,事件,文本区可以触发,DucumentEvent,事件,DucumentEven,类,在,javax.swing.event,包中。用户在文本区组件的,UI,代表的视图中进行文本编辑操作,使得文本区中的文本内容发生变化,将导致该文本区所维护的文档模型中的数据发生变化,从而导致,DucumentEvent,事件的发生。文本区调用,addDucumentListener(DucumentListener listener),向文本区维护的文档注册监视器。监视器需实现,DucumentListener,接口,该接口中有,3,个方法:,public void changedUpdate(DocumentEvent e),public void removeUpdate(DocumentEvent e),public void insertUpdate(DocumentEvent e),getDocument(),返回维护的文档,该文档是实现了,Document,接口类的一个实例。,例,10-12,中,,有两个文本区和一个文本框。当用户在文本区,inputText,进行编辑操作时,文本区,showText,将显示第一个文本区中所有和指定模式匹配的字符串。用户可以事先在一个文本框,patternText,中输入指定的模式,比如,输入:,sdpPunct+,,即通过该模式获得文本区,inputText,中的全部单词,效果如图,10.14,所示。,2024/9/15,35,事件处理模式图,10.9,2024/9/15,36,10.7,按钮与标签组件,_,1,JButton,按钮,JButton,类是专门用来建立按钮的,即,JButton,类创建的一个对象就是一个按钮。,JButton,类常用的方法如下:,Button(String text),创建名字是,text,的按钮。,public JButton(Icon icon),创建带有图标,icon,的按钮。,public JButton(String text, Icon icon),创建名字是,text,且带有图标,icon,的按钮,public void setText(String text,),重新设置当前按钮的名字,名字由参数,text,指定。,public String getText(),获取当前按钮上的名字。,public void setIcon(Icon icon),重新设置当前按钮上的图标。,public Icon getIcon(),获取当前按钮上的图标,public void setHorizontalTextPosition(int textPosition),设置按钮名字相对按钮上图标的水平位置。,public void setVerticalTextPosition(int textPosition),设置按钮上名字相对按钮上图标的垂直位置。,public void setMnemonic(char mnemonic),设置按钮的键盘激活方式,,mnemonic,的有效值为,az,。如果按钮用此方法设置了键盘激活方式,如参数,mnemonic,取值,o,,那么在键盘操作,ALT+O,就可激活按钮。,public void addActionListener(ActionListener),向按钮增加动作监视器。,public void removeActionListener(ActionListener),移去按钮上的动作监视器。,按钮可以发生,ActionEvent,事件,当按钮获得监视器之后,用鼠标单击按钮或按钮获得焦点时按下空格键(,Space,键),就发生,ActionEven,事件,即,java.awt.envent,包中的,ActionEvent,类自动创建了一个事件对象。,例,10-13,中,,单击按钮切换按钮上的图标,效果如图,10.15,所示。,2024/9/15,37,例子,10-13,运行效果图,10.15,2024/9/15,38,2,JLabel,标签,JLabel,类负责创建标签对象,标签用来显示信息,但没有编辑功能。,JLabel,类的构造方法如下:,public JLabel(),创建没有名字的标签。,public JLabel (String s),创建名字是,s,的标签,,s,在标签中靠左对齐。,public JLabel (String s,int aligment),参数,aligment,决定标签中的文字在标签中的水平对齐方式。,aligment,的取值是,JLabel.CENTER,、,JLabel.LEFT,或,JLabel.RIGHT,。,public JLabel (Icon icon),创建具有图标,icon,的标签,,icon,在标签中靠左对齐。,public JLabel (String s,Icon icon,int aligment),创建名字是,s,,具有图标,icon,的标签。参数,aligment,决定标签中的文字和图标作为一个整体在标签中的水平对齐方式(名字总是在图标的右面)。,JLabel,类的常用实例方法如下:,String getText(),获取标签的名字。,void setText(String s),设置标签的名字是,s,。,Icon getIcon(),获取标签的图标。,void setIcon(Icon icon),设置标签的图标是,icon,。,void setHorizontalTextPosition(int a),参数,a,确定名字相对于标签上的图标的位置。,a,的取值是,JLabel.LEFT,或,JLabel.RIGHT,。,void setVerticalTextPosition(int a),参数,a,确定名字相对于,JLabel,上的图标的位置。参数,a,取值是,JLabel.BOTTOM,或,JLabel.TOP,。,2024/9/15,39,10.8,复选框与单选按钮组件,_,1,JCheckBox,复选框,复选框提供两种状态一种是选中,另一种是未选中,用户通过单击该组件切换状态。,JCheckBox,类常用方法如下:,public JCheckBox(),创建一个没有名字的复选框,初始状态是未选中。,public JCheckBox(String text),创建一个名字是,text,的复选框,初始状态是未选中。,public JCheckBox(Icon icon),创建一个带有默认图标,icon,但没有名字的复选框,初始状态是未选中。,public JCheckBox(String text, Icon icon),创建一个带有默认图标和名字,text,的复选框,初始状态是未选中。,public void setIcon(Icon defaultIcon),设置复选框上的默认图标,。,public void setSelectedIcon(Icon selectedIcon),设置复选框选中状态下的图标。该方法可能经常被使用,因为如果不明显地设置选中状态时的图标,复选框无论是选中状态还是未选种状态总是显示复选框上的默认图标,用户很难知道复选框是处于怎样的状态。,public boolean isSelected(),如果复选框处于选中状态该方法返回,true,,否则返回,false,。如果复选框没有指定默认图标,复选框就显示为一个,“,小方框,”,,如果是选中状态,,“,小方框,”,里面就有个小对号。,2024/9/15,40,复选框与单选按钮组件,_,ItemEvent,事件,当复选框获得监视器之后,复选框从未选中状态变成选中状态或从选中状态变成未选中状态时就发生,ItemEvent,事件,,,ItemEvent,类,将自动创建一个事件对象。,发生,ItemEvent,事件,的事件源获得监视器的方法是,addItemListener(ItemListener listener),由于复选框可以发生,ItemEvent,事件,JCheckBox,类,提供了,addItemListener(),方法。,处理,ItemEvent,事件,的接口是,ItemListener,,创建监视器的类必须实现,ItemListener,接口,,该接口中只有一个的方法。当在复选框发生,ItemEvent,事件时,监视器将自动调用接口方法,public void itemStateChanged(ItemEvent e),对发生的事件做出处理。,ItemEvent,事件,对象除了可以使用,getSource(),方法,返回发生,Itemevent,事件的事件源外,也可以使用,getItemSelectable(),方法,返回发生,Itemevent,事件,的事件源。,例,10-14,处理了复选框上的,ItemEvent,事件,当复选框被选中时,窗口中心显示一个带图标的标签,否则隐藏这个带图标的标签,效果如图,10.16,所示。,2024/9/15,41,10.8,复选框与单选按钮组件,_,2,JRadioButton,单选按钮,单选按钮和复选框很类似,所不同的是在若干个复选框中我们可以同时选中多个,而一组单选按钮同一时刻只能有一个被选中。,当创建了若干个单选按钮后,应使用,ButtonGroup,类,再创建一个对象,然后利用这个对象把这若干个单选按钮归组。归到同一组的单选按钮每一时刻只能选一。,单选按钮和复选框一样,也触发,ItemEvent,事件,。,ButtonGroup,fruit,=new ButtonGroup();,JRadioButton button1=new JRadioButton(,小学,),button2=new JRadioButton(,中学,),button3=new JRadioButton(,大学,);,fruit,.add(button1);,fruit,.add(button2);,fruit,.add(button3);,2024/9/15,42,10.9,列表组件,下拉列表是用户十分熟悉的一个组件。用户可以在下拉列表看到第一个选项和它旁边的箭头按钮,当用户单击箭头按钮时,选项列表打开。,下拉列表的常用方法如下:,public JComboBox(),创建一个没有选项下拉列表。,public void addItem(Object anObject),增加选项。,public int getSelectedIndex(),返回当前下拉列表中被选中的选项的索引,索引的起始值是,0,。,public Object getSelectedItem(),返回当前下拉列表中被选中的选项。,public void removeItemAt(int anIndex),从下拉列表的选项中删除索引值是,anIndex,的选项。,public void removeAllItems(),删除全部选项。,public void addItemListener(ItemListener),向下拉列表增加,ItemEvent,事件的监视器。,下拉式列表事件源可以发生,ItemEvent,事件,。当下拉列表获得监视器后,用户在下拉列表的选项中选中某个选项时就发生,ItemEvent,事件,,,ItemEvent,类,将自动创建一个事件对象。,例,10-15,中,,列表的选项是,Java,源文件的名字。当选择一个选项后,程序在一个文本区里显示所选择的,Java,源文件的全部内容,效果如图,10.17,所示。,2024/9/15,43,例子,10-15,运行效果图,10.17,2024/9/15,44,10.10,表格组件,使用,JTable,可以创建一个表格对象。可以使用,JTable,的下列构造方法,JTable(Object data ,Object columnName ),创建表格。,表格的视图将以行和列的形式显示数组,data,每个单元中对象的字符串表示,也就是说,表格视图中对应着,data,单元中对象的字符串表示。参数,columnName,用来指定表格的列名。,用户在表格单元中输入的数据都被认为是一个,Object,对象,用户通过表格视图对表格单元中的数据进行编辑,以修改二维数组,data,中对应的数据,在表格视图中输入或修改数据后,需按回车键或用鼠标单击表格的单元格确定所输入或修改的结果。当表格需要刷新显示时,调用,repaint(),方法,。,例,10-16,是一个商品销售核算录入程序,客户通过一个表格视图的单元格输入每件商品的名称、单价和销售量。单击,“,每件商品销售额,”,按钮,表格视图每行的最后一个单元将显示该商品的总销售额;单击,“,总销售额,”,按钮,表格视图将计算最后一列值的和,同时表格增加一行,该行的最后一个单元显示总销售额,效果如图,10.18,所示。,2024/9/15,45,10.11,树组件,_,1,树与节点,JTree,类,的实例称为树组件。树组件也是常用的组件之一,它由节点构成。,树组件的外观远比按钮要复杂得多。要想构造一个树组件,必须事先
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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