java程序设计教学教案课件.ppt
第六章 常用组件及事件处理,第六章 常用组件及事件处理,选择框下拉列表滚动列表Component类的常用方法窗口事件鼠标事件键盘事件Java Swing 简介发布应用程序,Java窗口布局文本框组件按钮组件菜单项文本区组件标签画布面板,常用组件及事件处理简介,图形用户界面(GUI:Graphics User Interface)抽象工具包(AWT:Abstract Window Toolkit)容器类(Container)组件类(Component),常用组件及事件处理简介,Component类或者间接子类创建的对象,叫组件。ButtonScrollbarCanvasListCheckboxTextFieldTextAreaLabel以上类是包java.awt中的类,并且是包中Component类的子类。容器也是组件。,常用组件及事件处理简介,Container类或者间接子类创建的对象,叫容器向容器中添加组件,Component类提供一public方法:add()容器调用remove(Component C)、removeAll()方法可以移掉容器中的参数C的组件、全部组件。当容器中添加或者移掉新的组件时,调用validate()方法来刷新。容器也是组件,可以嵌套。,类的层次关系,6.1 Java 窗口,窗口 Frame类是一个容器,可以向窗口添加组件。窗口默认显示到屏幕。不允许将一个窗口添加到另一个容器中。1.Frame常用方法:Frame()构造方法可以创建一个无标题的窗口,窗口的默认布局是BorderLayout布局。Frame(String s)构造方法可以创建一个标题为s的窗口,窗口的默认布局是BorderLayout布局。,6.1 Java 窗口,Public void setSize(int width,int height)设置窗口大小,默认位置(0,0)。Public void setBounds(int a,int b,width,int height)设置窗口大小,位置(a,b)Public void setVisible(boolean b)设置窗口可见性,窗口默认是不可见的Public void setResizable(boolean b)设置窗口可调性,默认是可调的Public void dispose()撤消当前窗口,并释放所使用的资源。,6.1 Java 窗口,2.菜单条、菜单、菜单项MenuBar菜单条:java.awt包中的Menubar类是负责创建菜单条。Frame类将菜单条放入窗口的方法:setMenuBar(MenuBar bar)将菜单条添加到窗口的顶端,一个窗口只能添加一个菜单条;Menu菜单:Java.awt包中的Menu类是负责创建菜单的,Menu类的主要方法:Menu():建立一个空标题的菜单Menu(String s):建立一个标题为S的菜单public void add(MenuItem item):向菜单中添加由参数item指定的菜单选项对象。public void add(String s):向菜单中添加指定的选项public MenuItem getItem(int n):达到指定索引处的菜单选项public int getItemCount():得到菜单选项的数目,6.1 Java 窗口,2.菜单条、菜单、菜单项Menultem菜单项:Java.awt包中的Menultem是Menu的父类,该类负责创建菜单项,主要方法:MenuItem():构造无标题菜单项MenuItem(String s):构造有标题菜单项public void setEnabled(boolean b):设置当前菜单项是否可被选择public String getLabel():得到菜单选项的名字,Window Frame Dialog,6.2 布局,容器中的组件放置需要布局。Java.awt包中的布局类:FlowLayout、BorderLayout、CardLayout、GridLayout包中的布局类:BoxLayout设置布局:采用方法setLayout(布局对象),6.2 布局,1.FlowLayoutFlowLayout是Panel型容器的默认布局。构造方法:FlowLayout()创建一个布局对象FlowLayoutflownew FlowLayout();容器使用布局对象 con.setLayout(flow);Container类提供的 Add()方法将组件添加到容器中默认水平和垂直间隙是5个象素FlowLayout布局对象调用:setAlignment(int aligin)重新设置布局的对齐方式,aligin取:FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHTFlowLayout布局对象调用:setHgap(int hgap)、setVgap(int vgap)重新设置垂直和水平间隙。,6.2 布局,例子2,使用FlowLayout布局放置10个组件,6.2 布局,2.borderLayout 布局borderLayout是window型容器的默认布局。Frame、Dialog都是window的子类,默认布局是borderLayout布局。容器空间简单划分为:东西南北中五个区域。静态常量为:CENTER NORTH SOUTH WEST EAST。每个区域只放一个组件。一个容器中多于五个组件要使用容器嵌套。使用容器的add()方法将组件添加到容器中。,6.2 布局,例子3:采用BorderLayout布局,6.2 布局,3.CardLayout布局CardLayout的容器同时可显示多个组件,但每次只显示一个出来。被显示出来的组件将占据所有的容器空间。使用CardLayout的一般步骤:创建:CardLayout card=new CardLayout();容器设置布局setLayput():con.setLayout(card);调用add()方法将组件b加入容器:add(String s,Component b);显示用show()方法:mycard.show(con,s);按顺序显示:card.first(con);card.last(con);card.next(con);card.previous(con);,6.2 布局,4.GridLayout布局GridLayout:组件位于行列组成的网格区域中。组件大小跟每一网格大小相同。使用步骤:创建布局对象,构造方法GirdLayout(int m,int n),指定划分mXn个网格,例:GridLayout grid=new GridLayout(10,8);最多容纳mXn个容器使用GridLayout布局的容器调用方法add将组件加入容器要求组件大小不一时用嵌套。嵌套的容器可使用:FlowLayout、CardLayout、GridLayout、BorderLayout。,6.2 布局,5.BoxLayout布局BoxLayout:盒式容器。在包中。Java.swing包提供了Box类,该类创建的容器成为盒式容器。盒式容器布局不可以改变。创建盒式布局对象,使用构造方法:BoxLayout(Container con,int axis);参数axis值:BoxLayout.X_AXIS、BoxLayout.Y_AXIS确定盒式 布局采用行排列还是列排列行式盒式容器布局只允许一行。列式盒式容器布局只允许一列。静态Box创建行型盒式布局的方法:createHorizontalBox()、创建列型盒式布局的方法createVerticalBox()控制盒式布局容器中组件的距离,静态水平支撑(距离)调用:createHorizontalStrut(int width)静态垂直支撑(距离)调用:createVerticalStrut(int height),6.2 布局,例子4:,6.2 布局,6.null布局null布局:空布局,空布局容器可以准确定位组件在容器的位置和大小。设置:p.setLayout(null);p为容器向空布局中加入组件调用add()方法:add(c);设置组件在容器中的位置和本身大小:setBounds(int a,int b,int width,int height),6.3 文本框组件,Java.awt包中的:TextField类1.TextField类的主要方法:TextField():创建文本框,长度为一个字符,可输入若干字符TextField(int x):创建文本框,长度为x个字符,可输入若干字符TextField(String s):创建文本框,初始字符串为s,可输入若干字符。Public void setText(String s):文本框调用该方法设置文本框中的文本为参数s指定的文本,文本框中先前的文本将被清除。Public String getText():文本框调用该方法获取文本框的文本Public void setEchoChar(char c):设置文本框的回显字符。Public void setEditable(boolean b):设置文本框的可编辑性Public void addActionListener(ActionListener):向文本框增加动作监视器Public void removeActionListener(ActionListener):移去文本框上的动作监视器,6.3 文本框组件,例子5:两个文本框,6.3 文本框组件,2.文本框上的ActionEvent事件文本框上的ActionEvent事件:回车、单击按钮、下拉列表中选择事件、确定、取消等。三个概念:事件源:生成事件的对象,例如文本框,按钮,下拉式列表等等。监视器:事件源调用方法将某个对象作为监视器,如:addActionListener(监视器)。监视器是一个对象。处理事件的接口:监视器对象处理事件前,创建监视器的类要先声明实现相应的接口,在类体中给出该接口中所有方法的方法体。,6.3 文本框组件,包中提供事件类的接口。文本框的接口:ActionListener,接口中的方法只有一个方法:public void actionPerformed(ActionEvent e)ActionEvent类中的方法获得发生ActionEvent 事件的事件源对象方法:public Object getSource()在事件源上创建监视器:sourceObject.addXXXListener(监视器);创建监视器前声明接口:class A implements XXXListener,6.3 文本框组件,例子6:,6.4 按钮组件,Java.awt包中Button类用来建立按纽。1.Button类常用方法:Button()使用这个构造方法创建按钮,按钮没有名字Button(String s):使用此构造方法创建按钮,按钮上的名称是SPublic void setLabel(String s):按钮对象调用该方法可以设置按钮上的名称Public String getLabel():按钮对象调用该方法获取按钮上的名称Public void addActionListener(ActionListener):按钮对象调用该方法可以向按钮增加动作监视器Public void removeActionListener(ActionListener):按钮对象调用此方法移除按钮上的动作监视器,6.4 按钮组件,2.按纽上的ActionEvent事件按纽上的ActionEvent事件:单击按钮。包中的ActionEven类自动创建了一个事件。,6.4 按钮组件,例子7:,6.5 菜单项,单击某个菜单项可以发生ActionEvent 事件例子8:通过处理菜单项事件结束程序,6.6 文本区组件,Java.awt包中TextArea类用来建立文本区,用以输入多行文本。1.TextArea类常用方法:TextArea():使用此构造方法创建文本区对象,文本区的列数和行数取默认值.文本区上有水平和垂直滚动条.TextArea(String s):使用此构造方法创建文本区对象,文本区的初始字符串为s.文本区有水平和垂直滚动条.TextArea(int x,int y):使用这个构造方法创建文本区对象,文本框行数为y,列数为x.文本区有水平和垂直滚动条.Public void setText(String s):文本区对象调用该方法可以将文本区中的文本设置为参数s指定的文本,文本区中先前的文本将将清楚.Public String getText():文本区对象调用该方法可以获取文本区中的文本.Public void insert(String s,int x):文本区对象调用该方法可以在指定位置x处,插入指定文本s.x指距离文本区开始处字符的个数。,6.6 文本区组件,public void replaceRange(String s,int start,int end)文本区对象调用该方法可以用给定的新文本s替换从指定位置start开始到指定位置end结束的文本,start和end不能大于文本区的字符的个数public void append(String s):文本区对象调用该方法可以在文本区中附加文本。int getCaretPostion:文本区对象调用该方法可以获得文本区中光标的位置。public void setCarePosition(int position)文本区对象调用该方法可以设置文本区中输入光标的位置,其中position不能大于文本区中字符的个数。public void selectAll():文本区对象调用该方法选中文本区中的全部文本。addTextListener(TextListener):文本区对象调用该方法可以向文本框增加文本监视器。,6.6 文本区组件,2.文本框区上的TextEvent事件文本区上的TextEvent事件:文本区中内容的改写。获得监视器:addTextListener(监视器)接口:TextListener接口中方法:textValueChanged(TextEvent e),6.6 文本区组件,例子9:在一个文本区输入若干英文单词时,另一个文本区排序,6.7 标签,Label类的实例就是一个标签。Label类常用的方法:Label()Label(String s)Label(String s,int alignment)Alignment取值:Label.LEFT、Label.RIGHT、Label.CENTERPublic void setText(String s)Public String getText()Public void setAlignment(int alignment),6.8 画布,Java.awt 包中的类canvas负责创建画布对象。在canvas子类创建画布对象,并在子类中重写父类的public void paint(Graphics g)方法。重写父类时,g是自动实例化的。,6.8 画布,例子10:在画布上绘制一个椭圆,6.9 面板,Java.awt 包中的类Panel负责创建面板。Panel是Container类的子类。Panel 也是容器。允许容器嵌套。,6.9 面板,例子11:有2个面板,每个面板里添加一个标签和一个按钮,再把两个面板添加到窗体中。,6.10 选择框,Java.awt包中CheckBox类用来建立选择框,有选中和末选中两种状态。CheckBox类常用方法:CheckBox():创建选择框,没有名字。CheckBox(String s):创建选择框,选择框右边名称由S指定CheckBox(String s,boolean b):创建选择框,右边名称由s指定,是否选中由b指定,b为true时选中.CheckBox(String s,boolean b,Checboxgroup g):创建选择框,右边的名称由s指定,是否选中由b指定,选择框的组由g来确定,每组只能有一个选择框被选中.Public void addItemListener(ItemListener)向选择框增加itemEvent事件的监视器.,6.10 选择框,CheckBox类常用方法(续):Public void removetemListener(ItemListener):移去监视器Public boolean getSate():该方法返回选择框的布尔状态.setState(boolean b):该方法设置选择框的状态getLabel():获取选择框的名称setLabel(String s):该方法可以指定选择框的名称,指定的字符串为s.,6.10 选择框,选择框上的ItemEvent事件选择框上的ItemEvent事件:选中与未选中之间转换时。事件源获得监视器方法:addItemListener(监视器)接口是ItemListener,创建监视器的类必须实现此接口。接口方法:itemStateChange(ItemEvent e)处理事件:getItemSelectable()返回事件源。,6.10 选择框,例子12:,6.11 下拉列表,Choice类创建下拉列表Choice类常用方法:Choice():使用该构造方法创建下拉列表Public void add(String s):下拉列表调用该方法增加一个名字为s的选项Public int getSelectedIndex():调用该方法可以返回当前被选中的选项的索引,索引的起始值为0.public String getSelectedItem():调用该方法可以返回当前被选中的选项的名称.Public void remove(int index):调用该方法从下拉列表中删除索引值为index的选项.Public void removeAll():删除全部选项Public void addItemListener(ItemListener):该方法可以向下拉列表增加itemEvent事件的监视器下拉列表上发生ItemEvent事件。,6.11 下拉列表,例子13:,6.12 滚动列表,Java.awt 包中的List用于创建滚动列表。滚动列表可以选中多个选项。在list滚动列表上单击,可以发生ItemEvent和ActionEvent事件:AddItemListener、addActionListener滚动列表的构造方法:List():创建滚动列表List(int n):创建滚动列表,可见行数为n List(int n,boolean b):创建滚动列表,可见行数n,是否允许多选由b指定.,6.13 Component类的常用方法,Component类是所有组件的父类 组件的颜色 设置组件背景色public void setBackground(Color c)设置组件前景色 public void setForeground(Color c)获取组件的背景色 public Color getBackground(Color c)获取组件的前景色 public Color getForeground(Color c)Color类的构造方法:public Color(int red,int green,int blue),6.13 Component类的常用方法,组件的字体 Public void setFont(Font t)调用该方法设置组件上的字体Public Font getFont(Font t)调用该方法获取组件上的字体字体对象的构造方法:Public Font(String name,int style,int size),6.13 Component类的常用方法,例子14:,6.13 Component类的常用方法,组件的大小与位置Public void setSize(int width,int height)设置组件大小Public void setLocation(int x,int y)设置组件的位置Public Dimension getSize()组件调用该方法获取一个Dimension对象的应用,该对象实体中有width和height成员变量Public void setBounds(int x,int y,int width,int height)调研能够该方法设置组件的位置和大小Public RectanglegetBounds()调用该方法返回一个Rectangle对象的应用,该对象的实体中含有名字是x,y,width和height成员变量,6.13 Component类的常用方法,组件的激活与可见性Public void setEnabled(boolean b)组件调用该方法可以设置组件是否可以被激活Public void setVisible(boolean b)设置组件的可见性除了window型组件外,其他的组件默认都是可见的paint方法与repaint方法Public void paint(Graphics g),在子类中可以重写该方法当重写该方法时候,相应的java环境将参数g实例化调用Repaint方法,程序先调用update(Graphics g)方法清除paint方法画的内容,然后再调用paint()方法可以重写update方法来选择清除哪些部分,6.13 Component类的常用方法,例子:,6.14 窗口事件,Window类子类所创建的对象都可以发生WindowEvent类型窗口事件 Frame是Window的子类,可以发生WindowEvent窗口事件。获得监视器:addWindowListener,6.14 窗口事件,WindowListener接口,个不同的方法:Public void windowActivated(WindowEvent e)Public void windowDeactivated(WindowEvent e)Public void windowClosing(WindowEvent e)Public void windowClosed(WindowEvent e)Public void windowIconified(WindowEvent e)Public void windowDeiconified(WindowEvent e)Publci void windowOpen(WindowEvent e),6.14 窗口事件,例子16,6.14 窗口事件,一个类实现一个接口时,要必须给出接口中的所有方法的实现。适配器可以代替接口来处理事件,当Java提供处理事件的接口多于一个方法的时候,java就相应提供一个适配器类。WindowAdapter适配器,6.14 窗口事件,例子17:,6.14 窗口事件,例子18:,6.15鼠标事件,使用MouseListener接口处理鼠标事件用MouseListener接口可以处理的5种操作发生的鼠标事件:在事件源上按下鼠标键在事件源上释放鼠标键在事件源上单击鼠标键鼠标进入事件源鼠标退出事件源,6.15鼠标事件,鼠标事件的类型是MouseEvent,该类有下列几个重要方法:getX():获取鼠标在事件源坐标系中的x坐标getY():获取鼠标在事件源坐标系中的y坐标getModifiers():获取鼠标的左键或者右键.getClickCount():获取鼠标被单击的次数getSource():获取发生鼠标事件的事件源,6.15鼠标事件,MouseListener接口中的方法有:mousePressed(MouseEvent):负责处理鼠标按下事件.mouseReleased(MouseEvent):负责处理鼠标释放事件.mouseEntered(MouseEvent):负责处理鼠标进入容器事件.mouseExited(MouseEvent):负责处理鼠标离开事件.mouseClicked(MouseEvent):负责处理单击鼠标事件.,6.15鼠标事件,例子19:,6.15鼠标事件,使用MouseMotionListener接口处理鼠标事件:在事件源上拖动鼠标、在事件源上移动鼠标。事件源获得监视器方法:addMouseMotionListener(监视器)MouseMotionListener()接口中有如下方法:mouseDragged(MouseEvent)负责处理鼠标拖动事件mouseMoved(MouseEvent)负责处理鼠标移动事件,6.15鼠标事件,鼠标事件的转移可以使用鼠标事件的转移将一个事件源发生的鼠标事件转移到另一个事件源上。使用javax.swing包中的SwingUtilities类的静态方法:MouseEvent convertMouseEvent(Component source,MouseEvent source,Component destination)可以将sourse组件上发生的鼠标事件转移到组件destination,此方法返回转移后的鼠标事件。,6.15鼠标事件,例子20:,6.16 键盘事件,使用KeyListener接口处理键盘事件KeyListener有3个方法:Public void keyPressed(KeyEvent e):Public void keyTyped(KeyEvent e)Public void keyReleased(KeyEvent e)KeyEvent类的:返回键码值:public int getKeyCode()判断哪一键被按下或释放,返回字符:public char getKeyChar(),6.16 键盘事件,键码表课本 194页 表6-1,6.16 键盘事件,例子21:,6.16 键盘事件,处理复合键键盘事件KeyEvent对象调用:getModifiers()方法返回InputEvent类的常量值:ALT_MARK、CTRL_MARK、SHIFT_MARK。例:e.getModifiers()=InputEvent.CTRL_MARK&e.getKeyCode()=Keyevent.VK_X,6.16 键盘事件,例子22,6.17 Java Swing简介,Java.awt包中Component类的子类:TextField、TextArea、Button、Label、Choice、List。类创建的对象有本地组件(同位体)为其工作,为重量组件。Javax.swing包中类:Japplet、JFrame、JDialog、Jcomponent。创建的大部分组件为轻量组件,没有同位体。swing组件类的设计原理建立在MVC(Model-View-Controller)结构基础上。,6.17 Java Swing简介,Japplet、JFrame、Jdialog类的子类是重组件,Jcomponent类的子类是轻组件,轻组件必须在重量组件中绘制自己。,6.17 Java Swing简介,6.17 Java Swing简介,6.17 Java Swing简介:JFrame类,JFrame类(对象是重量容器)的新特性:Jframe类或其子类创建的窗体是swing窗体不可以把组件直接填加到swing窗体中Swing窗体含有一个称为内容面板的容器,应把组件填加到内容面板中。不能为swing窗体设置布局,而应为swing窗体的内容面板设置布局。内容面板的默认布局是BorderLayout。Swing窗体通过调用getContentPane()方法得到它的内容面板。,6.17 Java Swing简介:JFrame类,例子23,6.17 Java Swing:JComponent类,Jcomponent类是所有轻量组件的父类。所有轻量组件是容器。包括组件:按纽 JButton文本框 JTextFIeld文本区 JTextArea表格 JTable树 JTree,6.17 Java Swing:JComponent类,按纽 JButton例子24:,6.17 Java Swing:JComponent类,JTextField、JPasswordField、JTextAreaJTextField文本框、JTextArea文本区和重组件的文本框、文本区类似。JTextField文本框可以设置文本对齐方式,采用setHorizontalAlignment(int alignment)。参数的有效值为JTextField.LEFT、JTextField.CENTER、JTextField.RIGHT、JTextField.LEADING、JTextField.TRAILINGJPasswordField获取字符数组的方法char getPassword().,6.17 Java Swing:JComponent类,JPasswordField和JTextField组件上都可以发生ActinEvent事件。JTextArea文本区没有滚动条.JTextArea可以使用setLineWrap(boolean b)方法决定输入的文本是否在文本区的右边界自动换行。使用setWrapStyleWord(boolean b)方法决定是以单词为界限还是以字符为界限换行。JTextField与重组件文本框不同的一个构造方法:JTextField(Document document,String s,int columns);其他的构造方法创建的文本框的默认文档类型是PlainDocument的一个实例。PlainDocument类的两个重要方法:insertString(int offset,String s,AttributeSet a);remove(int offset,int length);,6.17 Java Swing:JComponent类,例子 25,6.17 Java Swing:JComponent类,JTextArea文本区默认模型也是PlainDocument的一个实例。JTextArea上不再有TextEvent事件,而是发生DocumentEvent事件。使用addDocumentListener()方法向组件维护的数据模型注册监视器。,6.17 Java Swing:JComponent类,例子26,6.17 Java Swing:JComponent类,表格JTable构造方法:JTable(Object data,Object ColumnName)创建的表格维护的数据是data二维数组的值,表格的列名由数组columnName指定。当表格需要刷新显示时,让表格调用repaint方法。,6.17 Java Swing:JComponent类,表格JTable例子27:,6.17 Java Swing:JComponent类,树Jtree类对象提供用树型结构分层显示数据的视图。节点:树中最基本的对象,表示在给定层次结构中的数据项。树节点由javax.swing.tree包中的接口TreeNode定义,为了创建一个树,使用DefaultMutableTreeNode类为该树创建节点。它的常用的构造方法:DefaultMutableTreeNode(Object userObject),DefaultMutableTreeNode(Object userObject,boolean allowChildren)第一个方法默认有子节点,使用add方法添加其他节点作为它的子节点。根节点创建使用JTree的构造方法 JTree(TreeNode root),6.17 Java Swing:JComponent类,例子28:,6.17 Java Swing:JComponent类,树的事件树中的节点可以发生选择事件。一个树可以使用addTreeSelectionListener(TreeSelectionListener)方法获得一个监视器,处理事件的接口TreeSelectionListener 获取选中的节点的方法getLastSelectedPathComponent()获取与节点相关的信息 getUserObject(),6.17 Java Swing:JComponent类,例子29,6.18 发布应用程序,作业,什么是容器?什么是组件?Java窗口的默认布局是什么?一个窗口是否允许添加到另一个容器中?validate()方法的作用是什么?创建监视器对象的类必须声明实现相应的事件接口,格式是怎样?如何判断文本框内是否输入了字符?文本区上的TextEvent事件处理的接口是什么?该接口中的方法是什么?Java.awt包中的哪个类负责创建画布对象?说明画布对象的作用。Panel类的作用。选择框上的事件是什么?,作业,Chioce类的常用方法是什么?如何使用?Component类的常用方法的使用。WindowListener接口中的方法是什么?用窗口适配器如何关闭窗口?MouseListener接口处理的5种鼠标事件是什么?MouseMontionListener接口处理的鼠标事件是什么?处理键盘事件的接口及其使用方式。PlainDocument类中重要方法的使用。什么是重量组件?什么是轻量组件?它们有什么不同?MVC程序设计模式它的设计思想是什么?,