好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第5讲 图形用户界面设计.ppt

114页
  • 卖家[上传人]:工****
  • 文档编号:587225091
  • 上传时间:2024-09-05
  • 文档格式:PPT
  • 文档大小:1.59MB
  • / 114 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1第第5讲讲 图形用户界面设计图形用户界面设计主要内容主要内容p AWT和和Swingp   容器容器p   布局布局p   Swing组件组件 p   Java图形设计图形设计p   事件处理事件处理  2AWT和和Swing组件组件•AWT:: Abstract Window Toolkit((抽象窗口工具集)抽象窗口工具集)•    图形界面是平台相关的;图形界面是平台相关的;AWT是重量级的,依赖是重量级的,依赖本地代码实现不同平台外观有差异,不同平台运本地代码实现不同平台外观有差异,不同平台运行行AWT程序可能有不同的程序可能有不同的bug,有违,有违java“一次编写,一次编写,到处运行到处运行”口号•Swing:轻量级纯:轻量级纯JAVA的图形库基于的图形库基于AWT,更丰,更丰富,功能更强大不同平台外观一致富,功能更强大不同平台外观一致在在AWT组件组件的类名前加的类名前加“J”重量级重量级”组件与组件与“轻量级轻量级”组件一同使用时,如组件一同使用时,如果组件区域有重叠,则果组件区域有重叠,则“重量级重量级”组件总是显示组件总是显示在上面在上面  3常用的图形组件常用的图形组件•AWT::     java.awt.*     Lable、、Button 、、List 、、TextField……..     Frame 、、Panel 、、Container•Swing:     javax.swing.*    JLable、、JButton 、、JList 、、JTextField……..    JFrame 、、JPanel•不要在容器中混合使用不要在容器中混合使用AWT和和Swing组件组件 4容器容器•JavaJava的图形用户界面由的图形用户界面由组件组件构成,例如按钮构成,例如按钮((buttonbutton)、文本输入框()、文本输入框(textfieldtextfield)、)、标签(标签(labellabel)等都是组件,其中有一类特)等都是组件,其中有一类特殊的组件称为殊的组件称为容器容器((containercontainer),例如框),例如框架(架(frameframe)、面板()、面板(panelpanel)等。

      等•容器容器是组件的容器,各种组件(包括容器)是组件的容器,各种组件(包括容器)可以通过可以通过add()add()方法添加到容器中方法添加到容器中 5顶层容器顶层容器•顶层(顶层(Top level)容器)容器–所有组件都必须包含在某个容器中,而有些容器所有组件都必须包含在某个容器中,而有些容器是可以嵌套的,在这个嵌套层次的最外层,必须是可以嵌套的,在这个嵌套层次的最外层,必须是一个顶层(是一个顶层(Top level)容器)容器•四种顶层容器四种顶层容器((Swing组件中的重量级组件)组件中的重量级组件)–JFrame、、JApplet、、JDialog和和Jwindow–JFrame是一个带有标题行和控制按钮(最小化、是一个带有标题行和控制按钮(最小化、恢复恢复/最大化、关闭)的独立窗口,最大化、关闭)的独立窗口,创建应用程创建应用程序时需要使用序时需要使用JFrame创建小应用程序时使用创建小应用程序时使用JApplet,它被包含在浏览器窗口中它被包含在浏览器窗口中创建对话创建对话框时使用框时使用JDialogJWindow是一个不带有标题是一个不带有标题行和控制按钮的窗口,因此通常很少使用行和控制按钮的窗口,因此通常很少使用   6例例1:应用:应用JFrame类建立一个窗体类建立一个窗体•import java.awt.*;•import javax.swing.*;•public class JFrameDemo {•public static void main(String s[ ]) {•JFrame frame = new JFrame("JFrameDemo");                                                           //创建一个创建一个JFrame的实例的实例•JButton button = new JButton("Press me");  //创建一个创建一个JButton的实例的实例•frame.getContentPane().add(button, BorderLayout.CENTER);                                                          //将将JButton放到放到JFrame的中央的中央•frame.pack();                    //将将JFrame设置到适当的大小设置到适当的大小•frame.setVisible(true);       //显示显示JFrame•}•}  7将组件放入内容窗格将组件放入内容窗格•顶层容器都有一个顶层容器都有一个内容窗格(内容窗格(ContentPane))•顶层容器中除菜单之外的组件都是放在这个内容窗格顶层容器中除菜单之外的组件都是放在这个内容窗格中中•方法一:通过顶层容器的方法一:通过顶层容器的getContentPane()方法获得其方法获得其缺省的内容窗格,然后将组件添加到内容窗格中。

      例缺省的内容窗格,然后将组件添加到内容窗格中例如:如:Container contentPane = frame.getContentPane(); contentPane.add(button, BorderLayout.CENTER); 或或frame.getContentPane().add(button, BorderLayout.CENTER); 8将组件放入内容窗格将组件放入内容窗格•方法二:方法二:创建一个新的内容窗格取代顶层容器缺省创建一个新的内容窗格取代顶层容器缺省的内容窗格通常是创建一个的内容窗格通常是创建一个JPanel的实例,然的实例,然后将组件添加到后将组件添加到JPanel实例中,再通过顶层容器实例中,再通过顶层容器的的setContentPane()方法将方法将JPanel实例设置为新的实例设置为新的内容窗格,例如:内容窗格,例如:•JPanel contentPane = new JPanel();•contentPane.setLayout(new BorderLayout());•contentPane.add(button, BorderLayout.CENTER);•  frame.setContentPane(contentPane);•思考:使用方法二实现例思考:使用方法二实现例1功能功能 9面板面板(JPanel)•面板(面板(JPanel)是一种用途广泛的容器)是一种用途广泛的容器•与顶层容器不同的是,面板不能独立存在,必须被与顶层容器不同的是,面板不能独立存在,必须被添加到其他容器内部添加到其他容器内部•面板可以嵌套,由此可以设计出复杂的图形用户界面板可以嵌套,由此可以设计出复杂的图形用户界面面 •JPanel panel = new JPanel();•panel.setBackground(Color.yellow);•panel.add(button); 10布局管理器布局管理器•布局管理器控制组件在容器中的大小、形状布局管理器控制组件在容器中的大小、形状和位置。

      和位置•每每一一个个容容器器都都有有一一个个默默认认的的布布局局管管理理器器,,也也可可以以通通过过setLayout()方法方法来设置其他布局管理器来设置其他布局管理器 •布布 局局 管管 理理 器器 :: FlowLayout、、 BorderLayout、、GridLayout、、CardLayout、、null ……. 11FlowLayout布局管理器布局管理器•1、、FlowLayout流式布局流式布局–  FlowLayout布布局局管管理理是是一一种种最最简简单单的的布布局管理方法,是局管理方法,是JPanel的默认布局的默认布局 –它它将将组组件件按按每每行行先先后后自自左左向向右右放放置置,,一一行行放不下时再换行放不下时再换行 –FlowLayout的默认对齐方式为的默认对齐方式为居中对齐居中对齐  12FlowLayout布局管理器布局管理器• 构造函数:构造函数:–①① FlowLayout():():创建默认的创建默认的FlowLayout布局管理器布局管理器–②② FlowLayout((int align ):以指定的对齐方式创建:以指定的对齐方式创建FlowLayout布局管理器。

      布局管理器其中的参数有:其中的参数有:FlowLayout.LEFT(左对齐左对齐)、、      FlowLayout.RIGHT(右对齐)、(右对齐)、  FlowLayout.CENTER(居中对齐)居中对齐)③③ FlowLayout(int align, int hgap, int vgap) :以指定的对:以指定的对齐方式及间距创建齐方式及间距创建FlowLayout布局管理器其中第一个布局管理器其中第一个参数为参数为对齐方式对齐方式,第二个参数为,第二个参数为组件行间距组件行间距,第三个参,第三个参数为数为列间距列间距 13FlowLayout布局管理器布局管理器示例:示例:setLayout(new FlowLayout(FlowLayout.RIGHT,20,40));;setLayout(new FlowLayout(FlowLayout.LEFT));;setLayout(new FlowLayout( ));; 14FlowLayout布局管理器布局管理器•【【例例2】】编写关于编写关于FlowLayout布局的窗框程序,在布局的窗框程序,在窗框中放置多个个按钮、标签和文本框。

      窗框中放置多个个按钮、标签和文本框•程序代码:程序代码:Example2.java 15BorderLayout布局管理器布局管理器•2、、 BorderLayout边界布局管理器边界布局管理器 –BorderLayout是是顶层容器中内容窗格顶层容器中内容窗格的默认布局的默认布局–它它将将整整个个容容器器的的区区域域分分为为东东、、西西、、南南、、北北、、中中五五个部分加入组件时,需指明放置的位置个部分加入组件时,需指明放置的位置 •在在BorderLayout 布局管理器的管理下,组件必须布局管理器的管理下,组件必须通过通过add( )方法方法加入到容器的五个命名区域之一加入到容器的五个命名区域之一在容器的每个区域,只能加入一个组件在容器的每个区域,只能加入一个组件 16BorderLayout布局管理器布局管理器•构造函数构造函数–①①BorderLayout():创建默认的():创建默认的BorderLayout–②② BorderLayout((int, int))::以以指指定定的的行行间间距距和和列列间间距距创创建建BorderLayout    在在BorderLayout布局的容器中放置组件,可调用布局的容器中放置组件,可调用add()方法,例如:方法,例如:              容器对象容器对象.add(组件组件, BorderLayout.SOUTH); 17BorderLayout布局管理器布局管理器•【【例例3】】编写关于编写关于BorderLayout边框布局的窗框程边框布局的窗框程序,在窗框中放置序,在窗框中放置6个按钮,其中南边放置个按钮,其中南边放置2个按钮。

      个按钮•程序代码:程序代码:BorderLayoutDemo.java 18GridLayout布局管理器布局管理器•3、、GridLayout网格布局网格布局–GridLayout是是一一种种网网格格式式的的布布局局管管理理器器,,将将容容器器区区域域划划分分成成m行行*n列列的的大大小小相相等等的的格格子子,,而而容容器器中中的的组组件件就就放放入这些格子中,占用大小完全相同的一格入这些格子中,占用大小完全相同的一格构造函数:构造函数:–①① GridLayout(())::创创建建默默认认的的GridLayout布布局局,,所所有有组件在一行中显示组件在一行中显示–②② GridLayout(int rows, int cols))::按按指指定定行行数数和和列列数数创建创建GridLayout布局–③③ GridLayout((int rows, int cols, int hgap, int vgap ))::按按指指定定行行数数、、列列数数、、行行间间距距和和列列间间距距创创建建GridLayout布布局 19GridLayout布局管理器布局管理器•【【例例4】】编写一个编写一个4行行2列的列的GridLayout网格布局程网格布局程序,可以用来保存学生的基本信息。

      序,可以用来保存学生的基本信息•程序代码:程序代码:GridLayDemo.java 20CardLayout布局管理器布局管理器•4、、CardLayout卡片布局卡片布局–一一种种卡卡片片式式的的布布局局管管理理器器,,将将容容器器中中的的组组件件((通通常常是是面面板板))像像扑扑克克牌牌一一样样排排列列,,里里面面放放置置多多张张叠叠放放在在一一起起的的卡卡片片((组组件件)),,每每次次只只能能显显示示最最上上面面的的一一张张 执行卡片布局执行卡片布局next等方法翻看卡片等方法翻看卡片–构造函数构造函数–①① CardLayout(())::创创建建默默认认的的CardLayout布布局局管理器–②② CardLayout((int rows, int cols))::以以指指定定的的行行间距和列间距创建间距和列间距创建CardLayout布局管理器布局管理器 21CardLayout布局管理器布局管理器• 主要方法:主要方法:– void first() 显显示示第第一一个个加加入入到到CardLayout的的组组件件–void last()显显示示最最后后一一个个加加入入到到CardLayout的的组组件件–void next()显显示示当当前前组组件件的的下下一一个个组组件件,,如如当当前前是最后一个,则下一个为第一个是最后一个,则下一个为第一个–void previous()显显示示当当前前组组件件的的前前一一个个组组件件,,如如当前是第一个,则前一个为最后一个当前是第一个,则前一个为最后一个容容器器对对象象.add(卡卡片片组组件件,“卡卡片片1”));;第第二二个个参参数数用来标识卡片,没有该参数,将引发异常。

      用来标识卡片,没有该参数,将引发异常 22CardLayout布局管理器布局管理器与幻灯片播放与幻灯片播放 •【【例例5】】编写编写CardLayout布局程序,在窗框中部放布局程序,在窗框中部放置一个卡片布局面板(卡片盒),内放置一个卡片布局面板(卡片盒),内放3张卡片面张卡片面板,每张卡片设背景色,并放一个标签窗框下部板,每张卡片设背景色,并放一个标签窗框下部安放一个面板,上面放安放一个面板,上面放4个按钮:个按钮:“上翻上翻”、、“下下翻翻”、、“自动播放自动播放”和和“暂停暂停”•程序代码:程序代码:Example4.java 23不使用布局管理器不使用布局管理器• 5、、null布局管理器布局管理器–null布布局局管管理理器器将将主主动动权权交交给给用用户户,,由由用用户户使使用用坐坐标标系系统统来来放放置置每每个个组组件件,,即即调调用用组组件件的的setBounds()方方法法来来设设置其放置位置和大小置其放置位置和大小1调用容器的调用容器的setLayout(null)将布局管理器将布局管理器设置为空设置为空 2调用组件的调用组件的setBounds()方法设置组方法设置组件的位置和大件的位置和大小小 24null布局管理器布局管理器•setBounds()方法的格式方法的格式: setBounds(int x,int y,int width,int height) 前两个前两个int型参数设置组件的位置,后两个型参数设置组件的位置,后两个int型参数设置组件的宽度和高度型参数设置组件的宽度和高度  25null布局管理器布局管理器•【【例例6】】编写手工布局程序,把窗框布局设为空,编写手工布局程序,把窗框布局设为空,然后在上面放置标签、文本框和按钮。

      然后在上面放置标签、文本框和按钮•程序代码:程序代码:Example5.java 26练习练习•1.使用使用null布局管理器编写程序实现界面显示效果布局管理器编写程序实现界面显示效果如图如图a所示•2.编写程序实现图编写程序实现图b所示显示效果,界面中添加所示显示效果,界面中添加6个个按钮组件按钮组件图图a图图b 27练习练习•参考程序:参考程序:GridLayoutDemo.javaLogon.java 28第第5 5讲讲 图形用户界面设计图形用户界面设计主要内容主要内容p    AWT和和Swingp   容器容器p   布局布局p   Swing组件组件 p   Java图形设计图形设计p   事件处理事件处理  29Swing 组件组件•按钮按钮•经常用到的按钮经常用到的按钮 –JButton、、JToggleButton、、JCheckBox、、JRadioButton –均是均是AbstractButton的子类或间接子类的子类或间接子类都可以设置文本、设置图标、注册事件监听程序都可以设置文本、设置图标、注册事件监听程序 30普通按钮普通按钮JButtonJButton•构造方法构造方法JButton() —— 创建一个既没有显示文本也没有图标的按创建一个既没有显示文本也没有图标的按钮钮JButton(Icon icon) —— 创建一个没有显示文本但有图标的创建一个没有显示文本但有图标的按钮按钮 JButton(String text) —— 创建一个有显示文本但没有图标创建一个有显示文本但没有图标的按钮的按钮 JButton(String text, Icon icon) —— 创建一个既有显示文本创建一个既有显示文本又有图标的按钮又有图标的按钮      和和Button不同的是,不同的是,Button组件上只能显示文字,组件上只能显示文字,JButton可以显示文字和可以显示文字和图标图标。

      31普通按钮普通按钮JButtonJButton•构造显示文本为构造显示文本为“Sample”的按钮的按钮 •构造显示文本为构造显示文本为“Sample”、带有钻石形状小图、带有钻石形状小图标的按钮标的按钮 JButton b = new JButton(“Sample” ); JButton b = new JButton("Sample",new ImageIcon("icon.gif")); 32切换按钮切换按钮JToggleButton•JToggleButton是具有两种状态的按钮,即是具有两种状态的按钮,即选选中状态中状态和和未选中状态未选中状态•JToggleButtonJToggleButton的构造方法主要有:的构造方法主要有:–JToggleButton(String text, boolean selected) 创创建建一一个个有有显示文本和指定初始状态但没有图标的切换按钮显示文本和指定初始状态但没有图标的切换按钮–JToggleButton(String text, Icon icon) 创创建建一一个个既既有有显显示示文本又有图标的切换按钮文本又有图标的切换按钮–JToggleButton(String text, Icon icon, boolean selected)  创建一个既有显示文本又有图标和指定初始状态的切换创建一个既有显示文本又有图标和指定初始状态的切换按钮按钮   33JCheckBox, JRadioButton•都是都是JToggleButton的子类的子类 ,构造方法的格式与构造方法的格式与JToggleButton相同,它们也都具有选中和未选中两相同,它们也都具有选中和未选中两种状态种状态 •JCheckBox复选框典型的应用是多项选择题复选框典型的应用是多项选择题•isSelected()方法获知按钮的当前状态方法获知按钮的当前状态 34JRadioButton单选按钮与单选按钮与ButtonGroup按钮组按钮组•JRadioButton单选按钮组的典型应用是单选按钮组的典型应用是单项选择题单项选择题,例如选,例如选择题有择题有3个答案,只允许选其中之一,需使用个答案,只允许选其中之一,需使用3个单选按钮组个单选按钮组成的按钮组。

      成的按钮组•按钮组类按钮组类ButtonGroup常用方法:常用方法:((1))ButtonGroup():构造按钮组对象(构造方法只有:构造按钮组对象(构造方法只有1个)2))void add(AbstractButton b):将按钮添加到组将按钮添加到组3))void clearSelection():清除按钮组中按钮的选中状态清除按钮组中按钮的选中状态4))int getButtonCount():返回按钮组的按钮个数返回按钮组的按钮个数5))void remove(AbstractButton b):从按钮组中移除按钮从按钮组中移除按钮 35JCheckBox复选框复选框•【【例例7】】编写使用复选框进行多项兴趣爱好选择的编写使用复选框进行多项兴趣爱好选择的程序用鼠标单击各个复选框,均会在下面的只读程序用鼠标单击各个复选框,均会在下面的只读文本框中动态显示选择结果,运行效果如下图:文本框中动态显示选择结果,运行效果如下图:•程序代码:程序代码:Example6.java 36JRadioButton单选按钮与单选按钮与ButtonGroup按钮组按钮组•【【例例8】】编写使用单选按钮组进行志向选择的程序,编写使用单选按钮组进行志向选择的程序,要求每次只选一个志向。

      程序运行效果如下:要求每次只选一个志向程序运行效果如下:•参考程序:参考程序:Example66.java 37标签(标签(JLabel))•标签(标签(JLabel)对象通常用于显示提示性的文本信息)对象通常用于显示提示性的文本信息或图标或图标 •构造方法主要有:构造方法主要有: –JLabel(String text) —— 构造一个显示文本信息的标签构造一个显示文本信息的标签–JLabel(String text, int horizontalAlignment) —— 构构造造一一个个显示文本信息的标签显示文本信息的标签–JLabel(Icon image, int horizontalAlignment) ——构构造造一一个个显显 示示 图图 标标 的的 标标 签签 ,, 水水 平平 对对 齐齐 方方 式式 由由 int型型 参参 数数horizontalAlignment指定指定–JLabel(String text, Icon icon, int horizontalAlignment) —— 构构造造一一个个同同时时显显示示文文本本信信息息和和图图标标的的标标签签, ,水水平平对对齐齐方方式式horizontalAlignment指定指定 38标签(标签(JLabel))    表示水平对齐方式的表示水平对齐方式的int型参数型参数horizontalAlignment 的的取值可为取值可为JLabel.LEFT、、 JLabel.RIGHT、、 JLabel.CENTER等常量,分别表示左对齐、右对等常量,分别表示左对齐、右对齐和居中。

      齐和居中   例例:  JLabel label=new JLabel(“hello”, JLabel.LEFT); 39组合框(组合框(JComboBox))•组合框(组合框(JComboBox)是一个下拉式菜单,它有)是一个下拉式菜单,它有两种形式:两种形式:不可编辑的和可编辑的不可编辑的和可编辑的,对不可编辑的,对不可编辑的JComboBox,用户只能在现有的选项列表中进行,用户只能在现有的选项列表中进行选择;而可编辑的选择;而可编辑的JComboBox,用户既可以在现,用户既可以在现有选项中选择,也可以输入新的内容有选项中选择,也可以输入新的内容  40JComboBox构造方法构造方法•JComboBox() —— 创创建建一一个个没没有有任任何何可可选选项项的的组组合框合框•JComboBox(Object[] items) —— 根据根据Object数组数组创建组合框,创建组合框,Object数组的元素即为组合框中的可数组的元素即为组合框中的可选项选项 例:创建一个具有四个可选项的组合框:例:创建一个具有四个可选项的组合框:String[] itemList = { "One", "Two", "Three", "Four" };JComboBox  jcb = new JComboBox(itemList); 41JComboBox类中方法类中方法•public void addItem(Object anObject) —— 在在末末尾尾位位置添加新的可选项置添加新的可选项•public void insertItemAt(Object anObject,int index) —— 在在index指定的位置添加新的可选项指定的位置添加新的可选项anObject•public void removeAllItems() —— 删除所有可选项删除所有可选项•public void removeItem(Object anObject) —— 删删除除由由anObject指定的可选项指定的可选项•public void removeItemAt(int anIndex) —— 删除指定删除指定位置(由位置(由anIndex指定)的可选项指定)的可选项  42组合框(组合框(JComboBox)应用)应用•【【例例8】】编程实现如下界面所示的运行效果。

      编程实现如下界面所示的运行效果•程序代码:程序代码:JComboBoxDemo.java 43列表框(列表框(JList))•列表(列表(JList)是可供用户进行选择的一系列可选项)是可供用户进行选择的一系列可选项 •构造方法构造方法 –JList() —— 构造一个空列表构造一个空列表–JList(Object[] listData) —— 构构造造一一个个列列表表,,列表的可选项由对象数组列表的可选项由对象数组listData指定指定–JList(Vector listData) —— 构造一个列表,构造一个列表,列表的可选项由列表的可选项由Vector型参数型参数listData指定指定 44列表框(列表框(JList))•例:根据例:根据String数组构造一个包含四个可选项的列数组构造一个包含四个可选项的列表表 •也可通过下面的命令创建:也可通过下面的命令创建:String[] data = {"one", "two", "three", "four"};   JList dataList = new JList(data); Vector listData = new Vector();listData.addElement("one ");listData.addElement("two ");listData.addElement("three ");listData.addElement("four ");JList  list = new JList(listData);  45列表框(列表框(JList)的应用)的应用•【【例例9】】编程用编程用列表框(列表框(JList))实现如下界面所示实现如下界面所示的运行效果。

      的运行效果•程序代码:程序代码:JListDemo.java 46文本组件(文本组件(JTextComponent))•用于显示信息和提供用户输入功能用于显示信息和提供用户输入功能 •在在Swing中提供了中提供了文本域文本域((JTextField)、)、口令输入口令输入域(域(JPasswordField)、文本区()、文本区(JTextArea)等多)等多个文本组件个文本组件 ,,都有一个共同的基类都有一个共同的基类——JTextComponent  47JTextComponent一些方法一些方法getSelectedText() ——从文本组件中提取被选中的文本内容从文本组件中提取被选中的文本内容getText() ――――从文本组件中提取所有文本内容从文本组件中提取所有文本内容getText(int offs, int len) ——从从文文本本组组件件中中提提取取指指定定范范围围的的文文本内容本内容select(int selectionStart, int selectionEnd) ――――在在文文本本组组件件中中选选中指定范围的文本内容中指定范围的文本内容selectAll() ――――在文本组件中选中所有文本内容在文本组件中选中所有文本内容setEditable(boolean b) ――――设置为可编辑或不可编辑状态设置为可编辑或不可编辑状态setText(String t) ――――设置文本组件中的文本内容设置文本组件中的文本内容setDocument(Document doc) —— 设置文本组件的文档设置文本组件的文档copy() —— 复制选中的文本到剪贴板复制选中的文本到剪贴板cut() —— 剪切选中的文本剪贴板剪切选中的文本剪贴板paste() —— 将剪贴板的内容粘贴到当前位置将剪贴板的内容粘贴到当前位置  48文本域文本域 JTextField•文本域是一个单行的文本输入框,可用于输入少量文本域是一个单行的文本输入框,可用于输入少量文本文本•主要构造方法:主要构造方法:–JTextField(int columns) —— 构构造造一一个个具具有有指指定定列列数数的空文本域,的空文本域,– JTextField(String text) —— 构构造造一一个个显显示示指指定定初初始始字符串的文本域字符串的文本域–JTextField(String text, int columns) —— 构构造造一一个个具有指定列数、并显示指定初始字符串的文本域具有指定列数、并显示指定初始字符串的文本域 例:例:构造一个列数为构造一个列数为35、初始字符串为、初始字符串为“Single Line”的的文本域文本域         JTextField tf = new JTextField(“Single Line” ,,35);; 49文本区文本区 JTextArea•文本区是一个多行多列的文本输入框。

      文本区是一个多行多列的文本输入框•主要构造方法:主要构造方法: JTextArea() —— 构造一个空文本区构造一个空文本区JTextArea(String text) —— 构构造造一一个个显显示示指指定定初初始字符串的文本区始字符串的文本区JTextArea(int rows, int columns) —— 构构造造一一个个具具有指定行数和列数的空文本区,有指定行数和列数的空文本区, JTextArea(String text, int rows, int columns) —— 构构造造一一个个具具有有指指定定行行数数和和列列数数、、并并显显示示指指定定初初始始字符串的文本区字符串的文本区 50文本区文本区 JTextArea•例:例:•JTextArea ta = new  JTextArea(“Initial text”, 4, 30)•对文本区进行操作的方法对文本区进行操作的方法append(String str)  将指定文本追加到文本区将指定文本追加到文本区insert(String str, int pos)  将指定文本插入到文本区的特定位置将指定文本插入到文本区的特定位置。

      replaceRange(String str, int start, int end) 指定文本替换文本区中的部分内容指定文本替换文本区中的部分内容 51JPasswordField密码框密码框•JPasswordField显示显示特殊符号特殊符号,如,如*,达到保密目的达到保密目的•密码框是文本框的子类,文本框和密码框都属于文本密码框是文本框的子类,文本框和密码框都属于文本组件•密码框密码框JPasswordField常用方法:常用方法:((1))JPasswordField()((2))JPasswordField(int columns)((3))void setEchoChar(char c)::设置密码框回显字符设置密码框回显字符4))char[ ] getPassword():获取密码框字符获取密码框字符•出于安全考虑,不要使用已过时的出于安全考虑,不要使用已过时的getText()方法获取方法获取密码框字符密码框字符  52JTextField文本框与文本框与JPasswordField密码框密码框•【【例例10】】编写一个编写一个Java程序,在程序中生成一个框程序,在程序中生成一个框架窗口,不使用窗口的布局管理器,加入组件,制架窗口,不使用窗口的布局管理器,加入组件,制作密码验证窗口。

      运行效果如下图:作密码验证窗口运行效果如下图:•程序代码:程序代码:PassWordWin.java 53菜单组件菜单组件•SWING包中提供的多种菜单组件包中提供的多种菜单组件 –JMenuBar–JMenu–JMenuItem –JCheckBoxMenuItem–JRadioButtonMenuItem– JPopupMenu  54菜单栏菜单栏JMenuBarJMenuBar•菜单栏是窗口中的主菜单,用来包容一组菜单菜单栏是窗口中的主菜单,用来包容一组菜单, ,只只有一种构造方法:有一种构造方法:JMenuBar() •JFrame、、JApplet和和JDialog等类中定义了等类中定义了setJMenuBar(JMenuBar menu)方法,可以把菜单方法,可以把菜单栏放到窗口的上方栏放到窗口的上方•例:例: JFrame frame = new JFrame(“JMenuBar”);;•         JMenuBar mb = new JMenuBar();;•          frame.setJMenuBar(mb);;  55菜单菜单JMenuJMenu•菜单是最基本的下拉菜单,用来包容一组菜单项或菜单是最基本的下拉菜单,用来包容一组菜单项或子菜单。

      构造方法如下子菜单构造方法如下:: public Menu(String label)    //其中其中 label指定了菜单上的文本指定了菜单上的文本 菜单加入菜单栏或者另一个菜单中菜单加入菜单栏或者另一个菜单中 JMenu  menu1 = new JMenu( "File");JMenu  menu2 = new JMenu( "Option");JMenu  menu3 = new JMenu( "Help");mb.add(menu1);mb.add(menu2); mb.add(menu3);  56菜单项菜单项JMenuItemJMenuItem•常用的菜单项构造方法常用的菜单项构造方法 –JMenuItem(Icon icon) —— 构构造造一一个个只只显显示示图图标标的的菜菜单单项,图标由项,图标由Icon型参数型参数icon指定指定 –JMenuItem(String text) —— 构构造造一一个个只只显显示示文文本本的的菜菜单项,文本由单项,文本由String型参数型参数text指定指定–JMenuItem(String text, Icon icon) —— 构构造造一一个个同同时时显显示示文文本本和和图图标标的的菜菜单单项项,,文文本本由由String型型参参数数text指指定定,,图标由图标由Icon型参数型参数icon指定指定–JMenuItem(String text, int mnemonic) —— 构造一个显构造一个显示文本并且有快捷键的菜单项,文本由示文本并且有快捷键的菜单项,文本由String型参数型参数text指定,快捷键由指定,快捷键由int型参数型参数mnemonic指定指定 JMenu m1 = new JMenu (“File”);;JMenuItem mi1 = new JMenuItem( "Save", KeyEvent.VK_S );JMenuItem mi2 = new JMenuItem (“Load”);;JMenuItem mi3 = new JMenuItem (“Quit”);;m1.add(mi1);;m1.add(mi2);;m1.add(mi3);; 构造了三个菜单项,分别显示文本“Save”、“Load”和“Quit”,其中第一个菜单项的快捷键为Ctrl+S,三个菜单项均被加入菜单m1中 快捷键也可以在菜单项被创建之后,通过setMnemonic(char mnemonic)方法进行设置 57菜单方法菜单方法•addSeparator ()和和insertSeparator(int index)::菜单菜单项间项间加入分隔线加入分隔线•例:例: JMenu m1 = new JMenu (“File”);;• m1.add(mi1);;•          m1.add(mi2);;•          m1.addSeparator();;•          m1.add(mi3);;  58复选和单选菜单项复选和单选菜单项•这是两种特殊的菜单项,在复选菜单项前面有一这是两种特殊的菜单项,在复选菜单项前面有一个小方框,在单选菜单项前面有一个小圆圈个小方框,在单选菜单项前面有一个小圆圈,可以可以进行选中或不选中的操作,使用方法与复选按钮进行选中或不选中的操作,使用方法与复选按钮和单选按钮类似和单选按钮类似•当菜单项的检验状态发生改变时,会引发当菜单项的检验状态发生改变时,会引发ItemEvent事件事件,使用使用ItemListener中的中的itemStateChanged()对此事件进行响应对此事件进行响应  59构造方法构造方法•复选菜单项构造方法复选菜单项构造方法 •单选菜单项构造方法单选菜单项构造方法 •boolean型参数指定菜单项的初始状态型参数指定菜单项的初始状态JCheckBoxMenuItem(Icon icon) JCheckBoxMenuItem(String text) JCheckBoxMenuItem(String text, boolean b) JCheckBoxMenuItem(String text, Icon icon) JCheckBoxMenuItem(String text, Icon icon, boolean b) JRadioButtonMenuItem(Icon icon) JRadioButtonMenuItem(Icon icon, boolean selected) JRadioButtonMenuItem(String text) JRadioButtonMenuItem(String text, boolean selected) JRadioButtonMenuItem(String text, Icon icon) JRadioButtonMenuItem(String text, Icon icon, boolean selected)  60菜单组件菜单组件•编程实现如下图运行结果:编程实现如下图运行结果:•程序代码:程序代码:Example22.java 61弹出式菜单弹出式菜单JPopupMenuJPopupMenu•弹出式菜单(弹出式菜单(JPopupMenuJPopupMenu)是一种比较特殊的独立)是一种比较特殊的独立菜单,可以根据需要显示在指定位置。

      有两种构造菜单,可以根据需要显示在指定位置有两种构造方法方法 –public JPopupMenu()——构造一个没有名称的弹出式菜构造一个没有名称的弹出式菜单单–public JPopupMenu(String label)——构造一个有指定名构造一个有指定名称的弹出式菜单称的弹出式菜单 62弹出式菜单弹出式菜单•构造一个名为构造一个名为“Popup”的弹出式菜单的弹出式菜单•加入菜单或菜单项加入菜单或菜单项  •在显示弹出式菜单时,必须调用在显示弹出式菜单时,必须调用show()方法方法 JPopupMenu p = new JPopupMenu (“Popup”) JMenuItem s = new JMenuItem(“Save”);;JMenuItem l = new JMenuItem(“Load”);;p.add(s);;p.add(l);; public void show(Component origin, int x, int y)需要有一个组件作参数,该组件的位置将需要有一个组件作参数,该组件的位置将作为显示弹出式菜单的参考原点作为显示弹出式菜单的参考原点  63对话框对话框JDialogJDialog•对话框(对话框(JDialog)是与框架类似的可移动窗口,)是与框架类似的可移动窗口,能够被设置为能够被设置为“模式模式”(model)(model)窗口,即在对话框窗口,即在对话框被关闭前,其他窗口无法接收任何输入信息。

      被关闭前,其他窗口无法接收任何输入信息•对话框的构造方法对话框的构造方法–JDialog(Frame owner) ——构造一个没有标题的非模式构造一个没有标题的非模式对话框对话框–JDialog(Frame owner, boolean modal) ——构造一个没构造一个没有标题的对话框,有标题的对话框,boolean型参数型参数modal指定对话框是否指定对话框是否为模式窗口为模式窗口–JDialog(Frame owner, String title) ——构造一个有标题构造一个有标题的非模式对话框,的非模式对话框,–JDialog(Frame owner, String title, boolean modal) ——构造一个有标题的对话框构造一个有标题的对话框 64对话框对话框JDialog•例:例:•JDialog dialog = new JDialog(frame, “Dialog”,true)•setVisible(true)方法显示,方法显示,setVisible(false)方法可以方法可以将一个对话框隐藏起来将一个对话框隐藏起来 65标准对话框标准对话框JOptionPane•SWING中还提供了用于显示标准对话框中还提供了用于显示标准对话框((JOptionPane)的)的JOptionPane类类 •定义了多个定义了多个showXxxDialog形式的静态方法形式的静态方法–showConfirmDialog —— 确认对话框,显示问题,要求确认对话框,显示问题,要求用户进行确认(用户进行确认(yes/no/cancel))–showInputDialog  —— 输入对话框,提示用户进行输入输入对话框,提示用户进行输入–showMessageDialog —— 信息对话框,显示信息,告知信息对话框,显示信息,告知用户发生了什么情况用户发生了什么情况 –showOptionDialog —— 选项对话框,显示选项,要求用选项对话框,显示选项,要求用户进行选择户进行选择   66文件对话框文件对话框JFileChooser•专门用于对文件(或目录)进行浏览和选择的对话专门用于对文件(或目录)进行浏览和选择的对话框,常用的构造方法框,常用的构造方法: :–JFileChooser() —— 根据用户的缺省目录创建文件对话根据用户的缺省目录创建文件对话框框–JFileChooser(File currentDirectory) —— 根据根据File型参数型参数currentDirectory指定的目录创建文件对话框指定的目录创建文件对话框–JFileChooser(String currentDirectoryPath) —— 根据根据String型参数型参数currentDirectoryPath指定的目录创建文件指定的目录创建文件对话框对话框   67文件对话框文件对话框JFileChooser显示显示•showOpenDialog(Component parent)–显示一个显示一个“打开打开”文件对话框文件对话框  •showSaveDialog(Component parent)–显示显示“保存保存”文件对话框文件对话框  •showDialog(Component parent, String approveButtonText)–显示一个自定义的文件对话框显示一个自定义的文件对话框 –标题和按钮上的文本由标题和按钮上的文本由String型参数型参数approveButtonText指定指定 •Component型参数,指定型参数,指定 “父组件父组件”,决定了文件对话框,决定了文件对话框的显示位置,如果该参数为的显示位置,如果该参数为null,则文件对话框显示在屏幕,则文件对话框显示在屏幕正中正中 •通过通过getSelectedFile()方法取得用户所选择的文件方法取得用户所选择的文件  68对话框对话框JDialog•例:编程实现如下图运行结果:例:编程实现如下图运行结果:•程序代码:程序代码:Example8.java 69练习练习•1.实现计算器程序界面,程序运行效果如下图实现计算器程序界面,程序运行效果如下图1所示:所示:•2.实现用户注册界面,程序的运行效果如下图实现用户注册界面,程序的运行效果如下图2所示:所示: 70练习练习•参考程序:参考程序:•CalculatorDemo.java•RegistDemo.java 71第第5 5讲讲 图形用户界面设计图形用户界面设计主要内容主要内容p    AWT和和Swingp   容器容器p   布局布局p   Swing组件组件 p   Java图形设计图形设计p   事件处理事件处理  72控制组件外观控制组件外观•颜色颜色–使用下面方法(在使用下面方法(在Jcomponent中定义)设置组件的前中定义)设置组件的前景色和背景色景色和背景色 –java.awt.Color类的一个实例作参数类的一个实例作参数 ,,我们可以使用我们可以使用Color类中预定义的类中预定义的颜色常量颜色常量,比如,比如Color.red和和Color.blue,也可以自己创建新的颜色:,也可以自己创建新的颜色:public void setForeground(Color c)——设置前景色设置前景色  public void setBackground(Color c)——设置背景色设置背景色 int r = 255, g = 255, b = 0;;Color myColor = new Color(r, g, b)  73字体字体创建创建Font对象对象Font(String name, int style, int size)::创创建建指指定定三三个参数:字体名、字体风格和尺寸大小的字体。

      个参数:字体名、字体风格和尺寸大小的字体–其其中中字字体体风风格格有有如如下下三三种种::Font.BOLD((粗粗体体))、、Font.ITALIC(斜体)、(斜体)、Font.PLAIN(普通体)普通体)•setFont(Font f)方法对组件中文本的字体进行设定方法对组件中文本的字体进行设定 –参数参数 java.awt.Font类的一个实例类的一个实例Font f = new Font(“Times New Roman”, Font.PLAIN, 14);; 字体名称字体名称 字体的大小字体的大小 字体的风格字体的风格 Font.BOLDFont.ITALICFont.PLAINFont.BOLD+Font.ITALIC  74颜色与字体颜色与字体•例:例:绘制文字绘制文字:编写一个:编写一个Java程序,生成一个窗口,程序,生成一个窗口,在窗口中分别显示红色宋体和黑色粗体的在窗口中分别显示红色宋体和黑色粗体的“Java程程序设计序设计”文字•参考程序:参考程序:PaintFont.java 75绘图绘图•当组件被显示时,调用当组件被显示时,调用 java.awt.Component类中定义类中定义paint(Graphics g)方法方法•每当需要重绘组件时,调用每当需要重绘组件时,调用repaint()方法,该方法将方法,该方法将自动调用自动调用paint(Graphics g)•javax.swing.JComponent继承继承java.awt.Component ,,它的它的paint(Graphics g)方法中,会调用如下三个方法:方法中,会调用如下三个方法:–paintComponent(Graphics g) —— 绘制组件绘制组件–paintBorder(Graphics g) —— 绘制组件的边框绘制组件的边框–paintChildren(Graphics g) —— 绘制组件中的子组件绘制组件中的子组件  在组件上绘制图形,只在组件上绘制图形,只需要改写这个方法需要改写这个方法 76GraphicsGraphics类的绘图方法类的绘图方法•1 1、画线、画线–在在Java的的Graphics类类中中提提供供画画线线功功能能的的是是drawLine( )方方法,其调用格式如下:法,其调用格式如下:–drawLine(int x1,int y1,int x2,int y2)–该该方方法法需需要要设设置置四四个个参参数数,,其其中中x1,y1表表示示线线段段的的一一个个坐坐标点,标点,x2,y2表示线段的另一个坐标点。

      表示线段的另一个坐标点• 2 2.矩形的绘制.矩形的绘制    Graphics类类中中提提供供了了三三种种类类型型的的矩矩形形,,它它们们分分别别是是普普通通矩矩形形、、圆圆角角矩矩形形和和立立体体矩矩形形而而每每一一种种矩矩形形都都提提供供两两种种不不同同风风格格的的方方法法,,一一种种是是仅仅画画出出矩矩形形的的边边框框;;另另一一种种是是不不仅仅画画出出边边框,并且还用相同的颜色将整个矩形区域填满框,并且还用相同的颜色将整个矩形区域填满 772. 矩形的绘制矩形的绘制• ((1 1)普通矩形)普通矩形 drawRect(int x, int y, int width, int height)                                                       //边框型风格边框型风格 fillRect(int x, int y, int width, int height)                                                         //  填充型风格填充型风格–其其中中头头两两个个参参数数分分别别表表示示矩矩形形左左上上角角的的x坐坐标标和和y坐标,后两个参数分别表示矩形的宽度和高度。

      坐标,后两个参数分别表示矩形的宽度和高度 782. 矩形的绘制矩形的绘制• ((2 2))立立体体矩矩形形  立立体体矩矩形形也也可可以以说说是是三三维维矩矩形形其其实实仅仅仅仅是是在在矩矩形形的的边边框框上上增增加加一一点点阴阴影影,,使使矩矩形形看看上上去去相相对对表表平平面面好好像像有有凸凸出出或或凹凹下下的的效效果果,,其其调调用方法的格式如下:用方法的格式如下:–draw3DRect(int  x,  int  y,  int  width,  int  height,  boolean raised)–fill3DRect(int  x,  int  y,  int  width,  int  height,  boolean raised)             –这这两两个个方方法法中中的的前前四四个个参参数数与与drawRect( )方方法法中中所所用用的的参参数数含含义义是是一一样样的的,,第第五五个个参参数数raised便便是是定定义义该该立立体体矩矩形形是是具具有有凸凸出出((值值为为true))还还是是凹凹下下((值值为为false))的的效效果果  792. 矩形的绘制矩形的绘制•((3 3))圆圆角角矩矩形形  也也就就是是矩矩形形的的四四个个顶顶角角呈呈圆圆弧弧状状,,每每个个圆圆弧弧其其实实是是由由四四分分之之一一的的椭椭圆圆弧弧所所构构成成。

      画画圆圆角矩形的两个方法的调用格式如下:角矩形的两个方法的调用格式如下:–    drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)–    fillRoundRect(int  x,  int  y,  int  width,  int  height,  int arcWidth, int arcHeight)–我我们们可可以以看看出出,,它它们们除除了了具具有有和和普普通通矩矩形形含含义义相相同同的的前前四四个个参参数数外外,,还还多多了了两两个个用用来来描描述述圆圆角角性性质质的的参参数数其其中中arcWidth代代表表了了圆圆角角弧弧的的横横向向直直径径;;arcHeight代代表表了了圆角弧的纵向直径圆角弧的纵向直径   80 3.椭圆的绘制.椭圆的绘制–在在Java中中绘绘制制椭椭圆圆的的方方法法是是给给出出该该椭椭圆圆的的外外接接矩矩形形作作为为参参数数,,其其调调用用格格式式与与画画普普通通矩矩形形的的方方法法相相似:似:–    drawOval(int x, int y, int width, int height)                                                            //边框型风格边框型风格–    fillOval(int x, int y, int width, int height)                                                                     //填充型风格填充型风格–这里这里x和和y是该椭圆外接矩形的左上角。

      是该椭圆外接矩形的左上角 814. 4. 画弧画弧–弧弧是是椭椭圆圆的的一一部部分分,,因因而而画画弧弧的的方方法法就就相相当当于于先先画画一一个个椭椭圆圆,,而而后后取取该该椭椭圆圆中中所所需需要要的的一一部部分分它们的调用格式如下:它们的调用格式如下:–   drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) –fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) –后后两两个个参参数数就就是是用用来来定定义义椭椭圆圆的的一一部部分分::startAngle参参数数表表 示示 该该 弧弧 从从 什什 么么 角角 度度 开开 始始 ,, arcAngle参参 数数 表表 示示 从从startAngle开始逆时针转了开始逆时针转了arcAngle度度 82 5. 多边形的绘制多边形的绘制•void drawPolygon(Polygon p)   参参数数是是多多边边形形对对象象Polygon,,先先定定义义Polygon对对象象,,然然 后后 将将 点点 加加 入入 到到 该该 对对 象象 中中 ,, 然然 后后 利利 用用drawPolygon进行多边形的绘制:进行多边形的绘制:Polygon p = new Polygon();p.addPoint(x1, y1);p.addPoint(x2, y2);...g.drawPolygon(p); 835. 5. 多边形的绘制多边形的绘制•         int p1X[]={20,20,100,20};   //多边形的多边形的 x 坐标坐标 •          int p1Y[]={20,80,20,20};   //多边形的多边形的 y 坐标坐标 •          int p1=3;                            //多边形的边数多边形的边数 •          g.fillPolygon (p1X,p1Y,p1); //画填充多边形画填充多边形 •          int p2X[]={280,120,50,90,210,280}; •          int p2Y[]={20,50,100,110,70,20}; •          int p2=5; •          g.drawPolygon (p2X,p2Y,p2);   //画多边形画多边形  84绘制图形绘制图形•例:编写一个例:编写一个Java程序,生成一个窗口,在窗口中程序,生成一个窗口,在窗口中分别绘制直线、矩形、椭圆。

      效果如下图分别绘制直线、矩形、椭圆效果如下图•参考程序:参考程序:PaintShape.java 85第第5 5讲讲 图形用户界面设计图形用户界面设计主要内容主要内容p    AWT和和Swingp   容器容器p   布局布局p   Swing组件组件 p   Java图形设计图形设计p   事件处理事件处理  86事件事件 •图形界面程序离不开事件(图形界面程序离不开事件(Event),通过事件驱),通过事件驱动方式进行人机互动交流动方式进行人机互动交流•常用事件:常用事件:–MouseEvent:鼠标事件:鼠标事件–KeyEvent:键盘事件:键盘事件–ActionEvent:动作事件,这是高级的语义事件动作事件,这是高级的语义事件–ItemEvent:选项事件(语义事件):选项事件(语义事件)–TextEvent:文本事件(语义事件):文本事件(语义事件)•语义事件能避开细节问题,适用范围广,具有跨平语义事件能避开细节问题,适用范围广,具有跨平台性 87事件处理模型事件处理模型•在在Java 程序的运行过程中,当用户通过程序的用户程序的运行过程中,当用户通过程序的用户界面进行某个操作时,便引发一个相应的界面进行某个操作时,便引发一个相应的事件事件((Event)。

      •1.事件源.事件源•引发事件的对象,如按钮、菜单项和文本框等引发事件的对象,如按钮、菜单项和文本框等•2.事件对象.事件对象•对于不同的事件源,对于不同的事件源,Java虚拟机会产生相应类型的虚拟机会产生相应类型的事件对象事件对象Java自动识别各种不同的事件对象的类自动识别各种不同的事件对象的类型并进行分类处理型并进行分类处理•3.事件处理(监听)器接口.事件处理(监听)器接口•各种类型的事件均有对应的事件处理器接口各种类型的事件均有对应的事件处理器接口该接口封装了与其对应类该接口封装了与其对应类型事件的各种处理方法,型事件的各种处理方法,并建立了事件到相应处理并建立了事件到相应处理方法的自动映射方法的自动映射 88事件处理模型事件处理模型•1、、事件源对象事件源对象S因用户的操作(鼠标或键盘)因用户的操作(鼠标或键盘)•2、系统会自动触发此、系统会自动触发此事件类对象事件类对象E,并通知所,并通知所授权的事件监听者授权的事件监听者L(需事先调用事件源对象的(需事先调用事件源对象的addXxxListener方法向方法向L注册),注册),•3、、事件监听者事件监听者L中有处理各种事件的方法中有处理各种事件的方法(事件事件处理者处理者1~n)便会处理此事件便会处理此事件E的各种状况的各种状况。

      S SE EL L 89事件处理方法事件处理方法•实现事件监听器接口的方法:实现事件监听器接口的方法:•1 1))程序加入程序加入java.awt.event包:包:import java.awt.event;;•2 2)给组件注册监听器,使用下列方法:)给组件注册监听器,使用下列方法:• addxxxListeneraddxxxListener( (事件监听器对象事件监听器对象);); •3 3)确定了事件监听器的类型后,必须在程序中定义)确定了事件监听器的类型后,必须在程序中定义类来类来实现这些接口实现这些接口,重写接口中的所有方法重写接口中的所有方法1))addKeyListener(new CharType()); 2))public class CharType implements KeyListener{   public void keyPressed(KeyEvent e){…………} //大括号中为处理事件的代码大括号中为处理事件的代码  public void keyReleased(KeyEvent e){}  //未用到此方法,所以方法体为空未用到此方法,所以方法体为空  public void keyTyped(KeyEvent e){}} 90鼠标产生的事件鼠标产生的事件产生条件:产生条件:当用户按下鼠标、释放鼠标或移动鼠标指针当用户按下鼠标、释放鼠标或移动鼠标指针时时鼠鼠标标事事件件的的表表示:示:1)1)从从MouseEventMouseEvent类创建的对象表示鼠标事件。

      类创建的对象表示鼠标事件监听类:监听类:两个鼠标监听两个鼠标监听器器MouseListenerMouseListener和和MouseMotionLiMouseMotionListenerstener2)2)表示:鼠标按钮相关事件监听器由实现表示:鼠标按钮相关事件监听器由实现MouseListenerMouseListener接口的对象表示,而鼠标移动接口的对象表示,而鼠标移动相关事件监听器则由实现相关事件监听器则由实现MouseMotionListenerMouseMotionListener接口的对象表示接口的对象表示3)3)必须实现的方法:其中必须实现的方法:其中MouseListenerMouseListener指指定定5 5个必须实现的方法,他们是个必须实现的方法,他们是MouseClickedMouseClicked、、MouseEnteredMouseEntered、、MouseExitedMouseExited、、MousePressedMousePressed和和MouseReleasedMouseReleasedMouseMotionListenerMouseMotionListener指定两种必须实现的方指定两种必须实现的方法,法,MouseDraggedMouseDragged和和MouseMovedMouseMoved。

      4)4)注册一个鼠标事件源:调用相应的注册一个鼠标事件源:调用相应的addMouseListener(thisaddMouseListener(this) )和和addMouseMotionListener(thisaddMouseMotionListener(this) )方法 91鼠标事件处理程序:小画板程序鼠标事件处理程序:小画板程序•【【任务描述任务描述】】在窗口上按住鼠标左键,并移动鼠标在窗口上按住鼠标左键,并移动鼠标指针到另外一个点,松开后,可以画一个矩形,界指针到另外一个点,松开后,可以画一个矩形,界面如下图并在左上角用一个面如下图并在左上角用一个Label显示该矩形的显示该矩形的位置,格式如下:(左上角横坐标,左上角纵坐标)位置,格式如下:(左上角横坐标,左上角纵坐标)-(右上角横坐标,右上角纵坐标)(右上角横坐标,右上角纵坐标) 92鼠标事件处理程序:小画板程序鼠标事件处理程序:小画板程序•【【任务分析任务分析】】该任务可以按如下步骤实现:该任务可以按如下步骤实现:•1)设计一个)设计一个myPaint类,包含类,包含4个全局变量个全局变量beginX, beginY,endX,endY分别代表矩形的左上角横坐标、左上角分别代表矩形的左上角横坐标、左上角纵坐标、右下角横坐标、右下角纵坐标;另外包含一个静纵坐标、右下角横坐标、右下角纵坐标;另外包含一个静态的态的myPaint类的对象类的对象frm。

      •2)) myPaint类继承类继承JFrame类,覆盖类,覆盖public void paint(Graphics g)方法,并在该方法中根据方法,并在该方法中根据beginX, beginY,endX,endY画矩形•3)让)让myPaint类实现类实现MouseListener接口,并实现该接口中接口,并实现该接口中的的mousePressed()方法中记录鼠标按下的左上角横坐标方法中记录鼠标按下的左上角横坐标beginX和左上角纵坐标和左上角纵坐标beginY,在,在mouseReleased()方法中方法中记录右下角横坐标记录右下角横坐标endX和右下角纵坐标和右下角纵坐标endY•4)在)在main()方法中建立一个窗口,设置窗口大小和可见性,方法中建立一个窗口,设置窗口大小和可见性,并添加一个标签用来显示坐标为并添加一个标签用来显示坐标为frm窗口添加一个鼠标监窗口添加一个鼠标监听器 93鼠标事件处理程序:小画板程序鼠标事件处理程序:小画板程序•【【任务实施任务实施】】•程序代码:程序代码:myPaint.java 94键盘产生的事件键盘产生的事件•在具有键盘焦点的组件中按下或释放键盘等操作时,在具有键盘焦点的组件中按下或释放键盘等操作时,都发生键盘事件都发生键盘事件 •键盘事件对应的事件类是键盘事件对应的事件类是KeyEvent类类 •KeyEvent类主要方法:类主要方法:–getKeyCode()()获得按下或释放的键代码(获得按下或释放的键代码(整数整数))–getKeyText()()获得按下或释放的键的获得按下或释放的键的字符字符串串•键盘事件对应的事件监听器为:键盘事件对应的事件监听器为:KeyListener或或KeyAdapter •主要方法:主要方法:•KeyPressed(KeyEvent e) 按下键盘时的处理方法按下键盘时的处理方法•KeyReleased(KeyEvent e) 释放键盘时的处理方法释放键盘时的处理方法•KeyTyped(KeyEvent e)输入某个按键时的处理方法输入某个按键时的处理方法 95键盘产生的事件键盘产生的事件产生条件:产生条件:当用户按下或释放一个键时当用户按下或释放一个键时键键盘盘事事件件的的表示:表示:1)1)从从KeyEventKeyEvent类类创创建建的的对对象象表表示示键键盘盘事件。

      事件监听类:监听类:键盘监听器键盘监听器2)2)表示:它们由实现表示:它们由实现KeyListenerKeyListener界面界面的对象代表的对象代表3)3)必须实现的方法:对应三种键盘事必须实现的方法:对应三种键盘事件,件,KeyListenerKeyListener指定了三个必须实现指定了三个必须实现的方法:的方法:keyPressedkeyPressed、、keyReleasedkeyReleased、、keyTypedkeyTyped4)4)注册一个键盘事件源:调用组件的注册一个键盘事件源:调用组件的addKeyListener(thisaddKeyListener(this) )方法 966.4 6.4 动作事件动作事件•凡是由凡是由组件组件产生的事件叫产生的事件叫动作事件动作事件,,动作事件动作事件对应的事件类是对应的事件类是ActionEvent类类 •动作事件对应的事件监听器为:动作事件对应的事件监听器为:ActionListener •监听器的主要方法:监听器的主要方法:    actionPerformed(ActionEvent e)发发生生动动作作事事件件时被调用时被调用 97动作事件动作事件产生条件:产生条件:按钮被按下、单行文本框中的回车、列表按钮被按下、单行文本框中的回车、列表框的某项被双击或一个菜单项被选中框的某项被双击或一个菜单项被选中行为事件的表示:行为事件的表示:1)1)从从ActionEventActionEvent类生成一个对象类生成一个对象监听类:监听类:行为监听器行为监听器ActionListenerActionListener2)2)表示:由实现了表示:由实现了ActionListenerActionListener接口的接口的对象表示行为监听器。

      对象表示行为监听器3)3)必须实现的方法:必须实现的方法: acitonPerformedacitonPerformed()()4)4)注册一个行为事件源:需要调用组件的注册一个行为事件源:需要调用组件的addActionListener(thisaddActionListener(this))方法5 5)撤销一个行为事件源:使用组件的)撤销一个行为事件源:使用组件的removeActionListener(thisremoveActionListener(this) )方法方法 98动作事件动作事件•例:编写一个例:编写一个Java程序,在程序中建立一个窗口,程序,在程序中建立一个窗口,有两个文本框和一个按钮,单击按钮,能把左边文有两个文本框和一个按钮,单击按钮,能把左边文本框的内容复制到右边文本框中本框的内容复制到右边文本框中•程序运行效果如下:程序运行效果如下:•程序代码:程序代码:Copy.java 99焦点事件的处理焦点事件的处理产生条件:产生条件:当一个组件得到或失去焦点时,发生焦点事当一个组件得到或失去焦点时,发生焦点事件件例如用户在对话框中从一个组件移到另外一例如用户在对话框中从一个组件移到另外一个组件进行操作时。

      个组件进行操作时这些组件只有一个能够得到焦点这些组件只有一个能够得到焦点焦焦点点事事件件的的表表示:示:1) 1) 由从由从FocusEventFocusEvent类创建的对象来表示类创建的对象来表示监听类:监听类:焦点监听器焦点监听器FocusListenerFocusListener2)2)表示:由实现了表示:由实现了FocusListenerFocusListener接口的对象接口的对象表示行为监听器表示行为监听器3)3)必须实现的方法:两个必须实现的方法,必须实现的方法:两个必须实现的方法,focusGainedfocusGained和和focusLostfocusLost 4)4)注册一个行为事件源:需要调用组件的注册一个行为事件源:需要调用组件的addFocusListeneraddFocusListener(this(this) )方法 100项目事件的处理项目事件的处理产生条件:产生条件:当用户选择一个单选按钮、复选框、复选框当用户选择一个单选按钮、复选框、复选框菜单项或者选择列表框、下拉列表框(选择菜单项或者选择列表框、下拉列表框(选择列表)中的项目时列表)中的项目时项项目目事事件件的的表表示:示:1)1)从从ItemEventItemEvent类创建的对象表示项目事件类创建的对象表示项目事件监听类:监听类:项目监听器项目监听器ItemListenerItemListener2)2)表示:它们由实现了表示:它们由实现了ItemListenerItemListener接口的接口的对象表示。

      对象表示3)3)必须实现的方法:必须实现的方法:ItemListenerItemListener仅指定了仅指定了一个必须实现的方法一个必须实现的方法itemStateChangeditemStateChanged4)4)注册一个项目事件源:需要调用组件的注册一个项目事件源:需要调用组件的addItemListener(thisaddItemListener(this) )方法 101例:选项事件和列表选择事件例:选项事件和列表选择事件•编写程序运行效果如图:使用下拉组合框存放若干编写程序运行效果如图:使用下拉组合框存放若干个班级名称,选择其中一个班级,在右边的列表框个班级名称,选择其中一个班级,在右边的列表框中显示该班所有同学的姓名若在列表框中选择姓中显示该班所有同学的姓名若在列表框中选择姓名(可多选),则在下面的文本区中显示选择结果名(可多选),则在下面的文本区中显示选择结果其中列表框和文本区各置于一个滚动窗格上其中列表框和文本区各置于一个滚动窗格上•参考程序:参考程序:Example7.javaExample7.java 102文本事件的处理文本事件的处理产生条件:产生条件: 当一个文本框或文本域的内容发生改当一个文本框或文本域的内容发生改变时变时文文本本事事件件的的表表示:示:1)1)从从TextEventTextEvent类类产产生生的的对对象象可可以以表表示文本事件。

      示文本事件监听类:监听类:文本监听器文本监听器TextListenerTextListener2)2)表示:它们由实现表示:它们由实现TextListenerTextListener接接口的对象来表示口的对象来表示3)3)必须实现的方法:必须实现的方法:TextListenerTextListener只只指定了一个必须实现的方法指定了一个必须实现的方法textValueChangedtextValueChanged4)4)注册一个文本事件源:必须调用组注册一个文本事件源:必须调用组件的件的addTextListener(thisaddTextListener(this) )方法 103窗口事件的处理窗口事件的处理产生条件:产生条件:当当一一个个窗窗口口被被激激活活、、撤撤消消激激活活、、打打开开、、关关闭闭、、图标化或撤消图标化时图标化或撤消图标化时窗窗口口事事件件的的表表示:示:1)1)从从WindowEventWindowEvent类创建的对象表示窗口事件类创建的对象表示窗口事件监听类:监听类:窗口监听器窗口监听器WindowListeneWindowListener r2)2)表示:由实现了表示:由实现了WindowListenerWindowListener接口的对接口的对象来表示窗口监听器。

      象来表示窗口监听器3)3)必须实现的方法:必须实现的方法:WindowListenerWindowListener接口指接口指定了定了7 7种必须实现的方法,分别对应窗口的种必须实现的方法,分别对应窗口的7 7种不同事件种类种不同事件种类4)4)注册一个窗口事件源,需要调用组件的注册一个窗口事件源,需要调用组件的addWindowListener(thisaddWindowListener(this) )方法 104窗口事件的处理窗口事件的处理windowOpened当窗口打开时当窗口打开时windowClosing单击窗口右上角关闭按钮尝试关闭窗口时单击窗口右上角关闭按钮尝试关闭窗口时windowIconified单击窗口的最小化图标,窗口最小化时执单击窗口的最小化图标,窗口最小化时执行方法行方法windowDeiconified单击窗口的还原按钮,窗口还原时执行单击窗口的还原按钮,窗口还原时执行windowActivated当窗口在一系列窗口之前,成为当前窗口当窗口在一系列窗口之前,成为当前窗口时执行,当打开窗口、还原窗口或点击某时执行,当打开窗口、还原窗口或点击某个窗口到前台都会调用该方法。

      个窗口到前台都会调用该方法windowDeactivated当某个窗口从前台移走时,例如图标化、当某个窗口从前台移走时,例如图标化、关闭窗口或另外一个窗口被激活等,关闭窗口或另外一个窗口被激活等,windowClosed当窗口关闭之后,如单击关闭按钮或执行当窗口关闭之后,如单击关闭按钮或执行了窗口的了窗口的disposedispose方法后执行方法后执行 105窗口事件的处理窗口事件的处理•例:处理窗口事件,在窗口的文本区中记录触发的例:处理窗口事件,在窗口的文本区中记录触发的事件运行效果如下图:事件运行效果如下图:•程序代码:程序代码:WindowEventDemo.java 106事件适配器事件适配器•为了进行事件处理,需要创建实现接口的类为了进行事件处理,需要创建实现接口的类•例如在例如在MouseListener接口中,声明了下述抽象方接口中,声明了下述抽象方法:法: mouseClicked(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent)在实现在实现MouseListener接口的类中,必须同时实现这五个方接口的类中,必须同时实现这五个方法。

      为了方便,法为了方便,Java为那些声明了多个方法的接口提供为那些声明了多个方法的接口提供了一个对应的了一个对应的适配器适配器(Adapter)类类 107接口及适配器接口及适配器接接 口口 名名 称称适配器名称适配器名称ComponentListenerComponentAdapterContainerListenerContainerAdapterFocusListenerFocusAdapterKeyListenerKeyAdapterMouseListenerMouseAdapterWindowListenerWindowAdapterMouseMotionListener 108事件适配器事件适配器•在适配器类中实现了相应接口中的全部方法,只是方在适配器类中实现了相应接口中的全部方法,只是方法的内容为空法的内容为空•例如:例如:MouseListener接口的形式如下:接口的形式如下:public interface MouseListener extends EventListener {public void mouseClicked(MouseEvent e);;public void mousePressed(MouseEvent e);;public void mouseReleased(MouseEvent e);;public void mouseEntered(MouseEvent e);;public void mouseExited(MouseEvent e);;} 109事件适配器事件适配器与其对应的适配器为与其对应的适配器为MouseAdapter::public abstract class MouseAdapter implements MouseListener {public void mouseClicked(MouseEvent e) { }public void mousePressed(MouseEvent e) { }public void mouseReleased(MouseEvent e) { }public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }} 110事件适配器事件适配器•在创建新类时,可以不实现接口,而是只继承某个适当的在创建新类时,可以不实现接口,而是只继承某个适当的适配器,并且覆盖所关心的事件处理方法。

      例:适配器,并且覆盖所关心的事件处理方法例: import java.awt.*;; import java.awt.event.*;;public class MouseClickHandler extends MouseAdapter{//  由于只关心对单击鼠标事件的处理,由于只关心对单击鼠标事件的处理,//  因此在这里继承因此在这里继承MouseAdapter,,//  以避免编写其他不需要的事件处理方法以避免编写其他不需要的事件处理方法public void mouseClicked(MouseEvent e) {//  进行有关的处理进行有关的处理… …}} 111WindowAdap适配器适配器•例:使用例:使用WindowAdap适配器做监视器,只处理窗适配器做监视器,只处理窗口关闭事件和激活事件,只需重写口关闭事件和激活事件,只需重写windowClosing 方法和方法和windowActivated即可•程序代码:程序代码:WindowAdapter1.java 112练习练习:•1.编写编写java应用程序,实现如下效果功能应用程序,实现如下效果功能•思考:若把第一个文本框的内容复制到第二思考:若把第一个文本框的内容复制到第二个文本框中,该如何实现?个文本框中,该如何实现? 113练习练习:•2.实现计算器程序界面,程序运行效果如下图实现计算器程序界面,程序运行效果如下图1所示:所示:实现基本的运算过程。

      实现基本的运算过程 114练习练习:•3.某公司针对要推出的新产品向消费者进行满意度某公司针对要推出的新产品向消费者进行满意度调查,调查分为调查,调查分为4个等级:个等级:A满意、满意、B一般、一般、C不满不满意、意、D不感兴趣经统计参与调查的不感兴趣经统计参与调查的500名消费者试名消费者试用结果为选择用结果为选择A的有的有60%、选择、选择B的有的有20%、选择、选择C的有的有10%、选择、选择D的有的有10%绘制一个彩色饼图描绘制一个彩色饼图描述上述百分比数值述上述百分比数值 •思考:通过柱状图如何实现?思考:通过柱状图如何实现? 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.