1、-1-理解Java Swing的基本结构掌握Java容器的使用方式掌握Java常用布局的使用方式掌握Swing的事件处理机制掌握Swing常用组件的使用方式目标目标-2-Swing概述概述 JDK 1.0的AWT(抽象窗口工具箱)用于创建用户界面。缺点是在不同的平台上有不同的外观,程序员必须在不同的平台上测试他们的代码。JDK 1.2(java 2)的核心JFC(java基础类),其重要技术就是Swing。它是AWT的扩充。Swing的优点有以下几个方面:pSwing拥有一个丰富、便捷的用户界面元素集合。拥有一个丰富、便捷的用户界面元素集合。pSwing对低层平台依赖的很少,因此与平台相关的对
2、低层平台依赖的很少,因此与平台相关的bug很少。很少。pSwing给予不同平台的用户一致的感观效果。给予不同平台的用户一致的感观效果。-3-Swing结构结构Swing组件位于javax.swing包中-4-容器容器容器用来放置其它图形组件容器种类:顶层容器中间容器-5-顶层容器顶层容器 顶层容器就是不包含在其它容器中的容器,Swing中常用的顶层容器有JFrame。JFrame被称为窗口框架,它扩展了java.awt.Frame类。JFrame其常用的方法及功能:方法方法功能说明功能说明JFrame()构造方法,用于创建一个初始时不可见的新窗体JFrame(String title)构造方法
3、,用于创建一个新的、初始不可见的、具有指定标题的窗体frameInit()在构造方法中调用该方法用来初始化窗体add(Component comp)添加组件setLocation(int x,int y)设置位置坐标,以像素为单位setSize(int width,int height)设置大小,以像素为单位setVisible(boolean b)设置是否可视,当参数是true则可视,当是false则隐藏setContentPane(Container contentPane)设置容器面板setIconImage(Image image)设置窗体左上角的图标setDefaultCloseOp
4、eration(int operation)设置窗体缺省的关闭操作,参数是常量,例如:EXIT_ON_CLOSEsetTitle(String title)设置标题-6-JFrame示例示例public class FrameDemo extends JFrame public FrameDemo()super(我的窗口);/调用父类构造方法指定窗口标题this.setSize(300,200);/设定窗口宽度300像素,高度200像素this.setLocation(100,100);/设定窗口左上角坐标this.setDefaultCloseOperation(JFrame.EXIT_ON
5、_CLOSE);public static void main(String args)FrameDemo frame=new FrameDemo();frame.setVisible(true);/使窗口可见-7-中间容器中间容器 中间容器不能作为顶层容器,它必须包含在其它容器中,例如,可以将中间容器放到JFrame顶层容器中。JPanel是一个中间容器,通常称为“面板”。JPanel类继承自JComponent类。JPanel其常用的方法及功能:方法方法功能说明功能说明JPanel()构造方法,用于创建一个默认布局为流布局的面板JPanel(LayoutManager layout)构造方
6、法,用于创建一个指定布局的面板add(Component comp)添加组件setLayout(LayoutManager mgr)设置面板的布局-8-JPanel示例示例/声明面板对象private JPanel jp;/声明按钮对象private JButton b1;private JButton b2;public PanelDemo()/实例化面板对象jp=new JPanel();/实例化一个按钮对象,该按钮上的文本为“Button 1”b1=new JButton(Button 1);/实例化一个按钮对象,该按钮上的文本为“Button 2”b2=new JButton(Butt
7、on 2);/将按钮添加到面板中jp.add(b1);jp.add(b2);/将面板添加到窗体框架中this.add(jp);this.setSize(300,100);this.setLocation(100,100);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);-9-布局布局 布局管理器用来管理组件在容器中的布局格式。当容器中容纳多个组件时,可以使用布局管理器将这些组件安排在一个容器中。布局管理器在java.awt包中 常用的布局管理器有:p FlowLayoutp BorderLayoutp GridLayoutp CardLa
8、yout-10-FlowLayout FlowLayout称为“流布局”,将组件从左到右顺序、流动的安排到容器中,直到占满上方的空间,则向下移动一行,继续流动。FlowLayout是面板的默认布局。FlowLayout常用的构造方法及功能:方法方法功能说明功能说明FlowLayout()创建一个中间对齐、默认间距为5像素的新流布局管理器FlowLayout(int align)创建一个指定对齐方式、默认间距为5像素的新流布局管理器FlowLayout(int align,int hgap,int vgap)创建一个指定对齐方式、水平和垂直间距的新流布局管理器-11-BorderLayout B
9、orderLayout称为“边界布局”,它允许将组件有选择地放置到容器的中部、北部、南部、东部或西部 BorderLayout是窗体框架(JFrame)的默认布局。BorderLayout构造方法及功能:方法方法功能说明功能说明BorderLayout()创建一个新的、无间距的边界布局管理器对象BorderLayout(int hgap,int vgap)创建一个新的、指定水平、垂直间距的边界局管理器-12-GridLayout GridLayout称为“网格布局”,它像表格一样,按行和列排列所有组件,且每个单元格大小都一样;在向表格里面添加组件的时候,它们将按照从左到右,从上到下的顺序加入。
10、网格布局的常用的构造方法及功能 方法方法功能说明功能说明GridLayout(int rows,int cols)创建一个新的、指定行数和列数的网格布局管理器GridLayout(int rows,int cols,int hgap,int vgap)创建一个新的、指定行数、列数、水平间距和垂直间距的网格布局管理器-13-CardLayout CardLayout称为“卡片布局”,它将加入到容器的组件看成一叠卡片,只能看到最上面的组件。通过调用CardLayout的一些方法,才能显示其中的组件。CardLayout常用的方法及功能:方法方法功能说明功能说明CardLayout()构造方法,用于
11、创建一个默认间距为0的新卡片布局管理器CardLayout(int hgap,int vgap)构造方法,用于创建一个指定水平和垂直间距的新卡片布局管理器first(Container parent)显示第一张卡片last(Container parent)显示最后一张卡片previous(Container parent)显示当前卡片的上一张卡片next(Container parent)显示当前卡片的下一张卡片show(Container parent,String name)显示指定名称的卡片-14-NULL布局布局 在实际开发过程中,用户界面比较复杂,而且要求美观,使用FlowLayo
12、ut、BorderLayout、GridLayout以及CardLayout这些布局很难满足要求。这时可以采用NULL(空)布局,即容器不采用任何布局,而是通过设置每个组件在容器中的位置及大小来安排。使用NULL布局的步骤如下:1.设置容器的布局为空设置容器的布局为空2.设置组件的位置及大小设置组件的位置及大小3.将组件添加到容器中将组件添加到容器中-15-事件概述事件概述 对于图形用户界面的应用程序,要想实现用户界面的交互,必须通过事件处理。事件处理就是在事件驱动机制中,应用程序可以响应事件来执行一系列的操作。事件驱动机制是在图形界面应用程序中由于用户操作(如单击鼠标或按下键盘某个键),程序
13、代码或系统内部而产生“事件”。这种基于事件驱动机制的事件处理是目前实现与用户交互的最好方式。-16-Java事件处理机制事件处理机制 事件的处理机制是委派式的处理方式:组件将事件处理委托给特定的事件处理对象,当该组件发生指定的事件时,就通知委托对象,并由此对象来处理这个事件。-17-Java事件体系结构事件体系结构 在Java事件体系结构中,以三种对象为中心来组成一个完整的事件模型:p 事件源:是产生或抛出事件的对象。事件源通常是事件源:是产生或抛出事件的对象。事件源通常是GUI组件。组件。p 事件:是一个描述事件源状态改变的对象;事件不是通过事件:是一个描述事件源状态改变的对象;事件不是通过
14、new运算符创建的,是由用户操作触运算符创建的,是由用户操作触发的。发的。p 监听接口:在监听接口中定义了抽象的事件处理方法,监听类中需实现监听接口中提供的方监听接口:在监听接口中定义了抽象的事件处理方法,监听类中需实现监听接口中提供的方法。法。-18-事件类事件类 事件类用于封装事件处理所必须的基本信息,如:事件源、事件信息等。所有的事件类都继承自EventObject,Java将所有组件可能发生的事件进行分类,具有共同特征的事件被抽象为一个事件类AWTEvent。AWTEvent是所有AWT事件的根事件类,其常用方法如下:方法方法功能说明功能说明int getID()返回事件类型Strin
15、g paramString()返回此Event状态的字符串,此方法仅在进行调试的时候使用Object getSource()从EventObject类继承的方法,用于返回事件源的对象-19-常用的事件类常用的事件类-1 常用的事件类包括ActionEvent(动作事件)、MouseEvent(鼠标事件)、KeyEvent(键盘事件)等。事件类的继承层次关系:-20-常用的事件类常用的事件类-2事件类事件类说明说明事件源事件源ActionEvent 行为事件,最常用的一个事件按钮、列表、菜单项等AdjustmentEvent调节事件,当调节滚动条时会生成此事件滚动条ItemEvent选项事件,当
16、选择不同的选项时会生成此事件列表、组合框等 FocusEvent焦点事件,当组件获得或失去焦点时会生成此事件能接受焦点的组件KeyEvent键盘事件,当敲击键盘时会生成此事件能接受焦点的组件MouseEvent鼠标事件,当操作鼠标时会生成此事件 所有组件WindowEvent窗口事件,当窗口状态改变时会生成此事件窗体-21-监听接口监听接口-1 监听接口中定义了抽象的事件处理方法,这些方法针对不同的操作进行不同的处理。在程序中,通常使用监听类实现监听接口中的事件处理方法。监听接口定义在java.awt.event包中,该包中提供了不同事件的监听接口,这些接口中定义了不同的抽象的事件处理方法。监
17、听接口监听接口处理方法处理方法功能说明功能说明ActionListeneractionPerformed(ActionEvent e)行为处理AdjustmentListeneradjustmentValueChanged(AdjustmentEvent e)调节值改变ItemListeneritemStateChanged(ItemEvent e)选项值状态改变FocusListenerfocusGained(FocusEvent e)获得聚焦focusLost(FocusEvent e)失去聚焦-22-监听接口监听接口-2监听接口监听接口处理方法处理方法功能说明功能说明KeyListene
18、rkeyPressed(KeyEvent e)按下键盘keyReleased(KeyEvent e)松开键盘keyTyped(KeyEvent e)敲击键盘MouseListenermouseClicked(MouseEvent e)鼠标点击mouseEntered(MouseEvent e)鼠标进入mouseExited(MouseEvent e)鼠标退出mousePressed(MouseEvent e)鼠标按下mouseReleased(MouseEvent e)鼠标松开MouseMotionListenermouseDragged(MouseEvent e)鼠标拖动mouseMoved
19、(MouseEvent e)鼠标移动WindowListenerwindowActivated(WindowEvent e)窗体激活windowClosed(WindowEvent e)窗体关闭以后windowClosing(WindowEvent e)窗体正在关闭windowDeactivated(WindowEvent e)窗体失去激活windowDeiconified(WindowEvent e)窗体非最小化windowIconified(WindowEvent e)窗体最小化windowOpened(WindowEvent e)窗体打开后-23-事件处理步骤事件处理步骤 Java中进行
20、事件处理的步骤如下:p 创建监听类,在事件处理方法中编写事件处理代码。创建监听类,在事件处理方法中编写事件处理代码。p 创建监听对象。创建监听对象。p 利用组件的利用组件的addXXXListener()方法将监听对象注册到组件上。方法将监听对象注册到组件上。-24-监听类监听类 监听类:是一个扩展监听接口的类,它可以扩展一个或多个监听接口。监听接口是Java类库中已定义好的接口。class MyListener implements ActionListener.-25-事件处理方法事件处理方法 事件处理方法:是监听接口中已经定义好的相应的事件处理方法,在创建监听类时,需要重写这些事件处理方
21、法,将事件处理的代码放入相应的方法中。class MyListener implements ActionListener/重写ActionListener接口中的事件处理方法actionPerformed()public void actionPerformed(ActionEvent e).-26-监听对象监听对象 监听对象:是监听类的一个实例对象,具有监听功能。这样,将此监听对象注册到组件上,当该组件上发生相应的事件时,将会被此监听对象捕获并调用相应的方法进行处理。MyListener listener=new MyListener();/创建一个监听对象button.addAction
22、Listener(bl);/注册监听-27-键盘事件键盘事件 public class KeyDemo extends JFrame implements KeyListener/注册键盘监听b.addKeyListener(this);/敲击键盘的事件处理方法public void keyTyped(KeyEvent e)/键盘按下的事件处理方法public void keyPressed(KeyEvent e)/获取按下键盘的码值int key=e.getKeyCode();/获得按钮当前的x,y轴坐标int x=b.getX();int y=b.getY();switch(key)cas
23、e KeyEvent.VK_D:/按D键,X轴坐标增加b.setLocation(x+5,y);break;./键盘松开的事件处理方法public void keyReleased(KeyEvent e)-28-鼠标事件处理鼠标事件处理 public class MouseDemo extends JFrame implements MouseMotionListener/注册监听p.addMouseMotionListener(this);/重写JFrame的paint()方法,此方法用于在窗体中画图public void paint(Graphics g)/设置画笔的颜色g.setColo
24、r(Color.blue);/画一个实心圆g.fillOval(x,y,10,10);/鼠标移动的处理方法public void mouseMoved(MouseEvent e)/鼠标拖动的处理方法public void mouseDragged(MouseEvent e)/获取鼠标当前的坐标x=e.getX();y=e.getY();/重画,repaint()触发paint()this.repaint();-29-适配器适配器 适配器和监听接口所实现的功能相同,但适配器是类而不是接口,它实现对应监听接口的多个事件处理方法(将这些方法都定义成空的),这样继承适配器后,可以仅重写需要的事件处理方
25、法。适配器类适配器类实现接口实现接口FocusAdapterFocusListenerKeyAdapterKeyListenerMouseAdapterMouseListenerMouseMotionAdapterMouseMotionListenerWindowAdapterWindowListener-30-Swing常用组件常用组件 任何一个复杂的GUI都是由最基本的组件在布局的统一控制下组合而成的 Java中,常用的组件有:p 按钮按钮p 标签标签p 图标图标p 文本组件文本组件p 复选框复选框p 单选按钮单选按钮p 列表框列表框p 组合框组合框-31-按钮按钮 JButton类提供一
26、个能够被点击的按钮功能,当点击按钮时,按钮将处于“下压”形状,松开后又恢复原状。在按钮中可以显示图标、字符串或两者同时显示。JButton类的常用方法及功能:方法方法功能说明功能说明JButton(String str)构造方法,用于创建一个指定文本的按钮组件JButton(Icon i)构造方法,用于创建一个指定图标的按钮组件JButton(String str,Icon icon)构造方法,用于创建一个指定文本和图标的按钮组件String getText()获取按钮上的文本内容void setText(String str)设置按钮上的文本内容void setIcon(Icon icon)
27、设置按钮上的图标-32-标签标签 JLabel类可以显示文字或图标,它没有边界,也不响应用户输入。可以利用标签标识组件,起到提示的作用。例如:使用标签标识文本框、文本域等这种不带标签的组件。JLabel类的常用的方法及功能:方法方法功能说明功能说明JLabel(Icon icon)构造方法,用于创建一个指定图标的标签对象JLabel(String text)构造方法,用于创建一个指定文本的标签对象JLabel(String text,Icon icon,int horizontalAlignment)构造方法,用于创建一个指定文本、图标和对齐方式的标签对象void setText(String
28、 txt)设置标签中的文本内容void setIcon(Icon icon)设置标签中的图标String getText()获取标签中的文本内容-33-图标图标 Icon图标用于加载图片,加载的图片文件格式一般限于gif和jpg文件。Icon是一个接口,ImageIcon类实现该接口,创建一个ImageIcon类的对象时只需将图片文名作为参数,就会打开文件并得到图形。Icon icon1=new ImageIcon(imagescry.gif);lbl=new JLabel(icon1);Icon icon2=new ImageIcon(imagescool.gif);b=new JButto
29、n(保存,icon2);-34-文本组件文本组件 Java中,文本组件主要用于实现文本串的输入,常用的文本组件有:p 文本框(文本框(JTextField)p 文本域(文本域(JTextArea)p 密码框(密码框(JPasswordField)文本框只能接收单行的文本输入,而文本域可以接收多行的文本输入,这两个类都继承于JTextComponent类 JTextComponent是抽象类,此类定义了文本组件的通用方法及特性,不能直接构造该抽象类的对象。-35-JTextField JTextField是实现文本框组件的类,该类与java.awt.TextField具有源代码兼容性,并具有建立
30、字符串的方法,此字符串用作针对被激发的操作事件的命令字符串。JTextField类的常用方法及功能:方法方法功能说明功能说明JTextField(int cols)构造方法,用于创建一个空文本的、指定长度的文本框JTextField(String str)构造方法,用于创建一个指定文本的文本框JTextField(String s,int cols)构造方法,用于创建一个指定文本的、指定长度的文本框String getText()或取文本框中的文本内容void setText(String str)设置文本框中的文本内容-36-JTextArea JTextArea是实现文本域组件的类,是一个
31、显示纯文本的多行区域,该组件中可以编辑多行多列文本,具有换行能力。JTextArea常用的方法及功能:方法方法功能说明功能说明JTextArea(int rows,int columns)构造方法,用于创建一个空文本、指定行数和列数的文本域JTextArea(String text)构造方法,用于创建一个指定文本的文本域JTextArea(String text,int rows,int columns)构造方法,用于添加组件创建一个指定文本、指定行数和列数的文本域String getText()或取文本域中的文本内容void setText(String str)设置文本域中的文本内容-37
32、-JPasswordField JPasswordField是实现密码框组件的类,可以提供让用户输入密码的功能。JPasswordField继承于JTextField,允许编辑单行文本,其视图指示键入内容,但不显示原始字符。即用户在密码框中输入的密码都以特殊符号显示。JPasswordField类的常用方法及功能:方法方法功能说明功能说明JPasswordField(int cols)构造方法,用于创建一个空的、指定长度的密码框JPasswordField(String str)构造方法,用于创建一个指定密码信息的密码框JPasswordField(String s,int cols)构造方法
33、,用于创建一个指定密码信息的、指定长度的密码框。char getPassword()获取密码框中的密码,以字符型数组形式返回setEchoChar(char c)设置密码框中的反射字符为指定字符,JDK1.6中密码框的缺省反射字符为-38-复选框复选框 复选框(JCheckBox)可以控制选项的开启或关闭,在复选框上单击时,可以改变复选框的状态,复选框可以被单独使用或作为一组使用。JCheckBox常用的方法及功能:方法方法功能说明功能说明JCheckBox(String str)构造方法,用于创建一个指定文本的、没有被选中的复选框JCheckBox(String str,boolean st
34、ate)构造方法,用于创建一个指定文本和是否选中的复选框。其中如果state为true,复选框在初始化时状态为被选中,否则相反void setSelected(boolean state)设置复选框的选中状态。true为选中,false则不被选中boolean isSelected()获得复选框是否被选中。返回true为选中,返回false则不被选中-39-单选按钮单选按钮 单选按钮(JRadioButton)可被选择或取消选择,并可为用户显示其状态。单选按钮一般成组出现,与按钮组(ButtonGroup)对象配合使用,一次只能选择其中的一个按钮。JRadioButton类中的常用的方法及功能
35、:方法方法功能说明功能说明JRadioButton(String str)构造方法,用于创建一个指定文本的、没有被选中的单选按钮JRadioButton(String str,boolean state)构造方法,用于创建一个指定文本的、没有被选中的单选按钮void setSelected(boolean state)设置单选按钮的选中状态:true为选中,false则不被选中boolean isSelected()获得单选按钮是否被选中:返回true为选中,false则不被选中-40-列表框列表框 JList类提供列表框功能,在列表框中可以提供多个选择项,允许用户选择一个或多个(按住“Ctr
36、l”键才能选中多个)。JList类的常用的方法及功能:方法方法功能说明功能说明JList()构造方法,用于创建一个没有选项的列表框JList(Object listData)构造方法,用于创建一个列表框,其选项列表为对象数组中的元素JList(Vector listData)构造方法,用于创建一个列表框,其选项列表为泛型集合中的元素int getSelectedIndex()获得选中选项的下标,此时用户选择一个选项Object getSelectedValue()获得列表中用户选中的选项的值Object getSelectedValues()以对象数组的形式返回所有被选中选项的值void ad
37、dItem(Object obj)添加一个新的选项-41-组合框组合框 JComboBox类提供组合框功能,它是一个文本框和下拉列表的组合。用户可以在下拉列表选项中选择一个不同的选项或在文本框内键入选择项。JComboBox常用的方法及功能:方法方法功能说明功能说明JComboBox()构造方法,用于创建一个没有选项的组合框JComboBox(Object listData)构造方法,用于创建一个组合框,其选项列表为对象数组中的元素JComboBox(Vector listData)构造方法,用于创建一个组合框,其选项列表为泛型集合中的元素int getSelectedIndex()获得组合框
38、中用户选中选项的下标Object getSelectedValue()获得组合框中用户选中选项的值void addItem(Object obj)添加一个新的选项-42-尽管Swing独立于AWT,但它是依照基本的AWT类实现的Container对象可用于将组件组合在一起容器中的组件根据特定布局排列Swing中的容器有顶级容器和中间容器两种中间容器可以相互嵌套以实现复杂的界面布局布局管理器类:FlowLayout、BorderLayout、GridLayout、CardLayout事件包含三个组件:事件对象、事件源、事件处理程序一个事件源可能会生成不同类型的事件小结小结-1-43-小结小结-2
39、java.awt.event包中常用的事件类:包中常用的事件类:ActionEvent、AdjustmentEvent、ItemEvent、FocusEvent、KeyEvent、MouseEvent、MouseEvent、WindowEvent在组件中注册监听器的方法是:在组件中注册监听器的方法是:addXXXListener()文本组件:文本组件:JTextField、JTextArea、JPasswordField标签:标签:JLabel按钮:按钮:JButton图标:图标:Icon接口、接口、ImageIcon类类复选框:复选框:JCheckBox单选按钮:单选按钮:JRadioButton,使用,使用ButtonGroup实现单选规则实现单选规则列表:列表:JList组合框:组合框:JComboBox 谢 谢 Thanks for listening.