【教学课件】第6章图形用户界面.ppt
Computer_yuComputer_yuComputer_yuComputer_yu第6章 图形用户界面6.1 Java图形用户界面初步6.2 事件处理6.3 布局管理6.4 Swing组件6.5 图形设计Java2程序设计实用教程(第2版)6.1 Java图形用户界面初步图形用户界面初步1.6.1.1 Java图形用户界面概述图形用户界面概述2.6.1.2 AWT组件概述组件概述Java2程序设计实用教程(第2版)6.1.1 Java图形用户界面概述图形用户界面概述1.图形用户界面概念图形用户界面概念图形用户界面(图形用户界面(Graphical User Interface,GUI),使用图形方式借助菜单、按钮等标准),使用图形方式借助菜单、按钮等标准界面元素和键盘、鼠标操作,实现人机交互。界面元素和键盘、鼠标操作,实现人机交互。2.Java的的AWT和和Swingjava.awt包提供抽象窗口工具集(包提供抽象窗口工具集(Abstract Window Tookit,AWT)。)。javax.swing包提供包提供JDK 1.2的的Swing组件,组件,它扩展了它扩展了AWT组件的功能。组件的功能。Java2程序设计实用教程(第2版)6.1.2 AWT组件概述组件概述图图6.1 java.awt包中主要类及组件类的继承关系包中主要类及组件类的继承关系 Java2程序设计实用教程(第2版)6.1.2 AWT组件概述组件概述1.组件组件public abstract class Component extends Object implements ImageObserver,MenuContainer,Serializable public void setLocation(int x,int y)/设置组件位置设置组件位置 public void setSize(int width,int height)/设置组件的宽度和高度设置组件的宽度和高度 public void setVisible(boolean b)/设置组件是否显示设置组件是否显示Java2程序设计实用教程(第2版)6.1.2 AWT组件概述组件概述2.容器容器public class Container extends Component public void setLayout(LayoutManager mgr)/设置布局管理器设置布局管理器 public Component add(Component comp)/在容器中添加一个组件在容器中添加一个组件compJava2程序设计实用教程(第2版)6.1.2 AWT组件概述组件概述3.窗口(窗口(window)和面板()和面板(panel)4.框架框架Frame和对话框和对话框Dialog框架框架public class Frame extends Window implements MenuContainer public Frame()public Frame(String title)/参数参数title指定框架的标题指定框架的标题 public String getTitle()/获取框架的标题获取框架的标题 public void setTitle(String title)/设置或修改框架的标题设置或修改框架的标题 public void setBackground(Color c)/设置框架的背景颜色设置框架的背景颜色 public void setResizable(boolean resizable)/设置框架是否可变大小设置框架是否可变大小Java2程序设计实用教程(第2版)6.1.2 AWT组件概述组件概述对话框对话框public class Dialog extends Window public Dialog(Frame owner)/owner指明拥有对话框的框架指明拥有对话框的框架 public Dialog(Frame owner,String title)/title是对话框的窗口标题是对话框的窗口标题 public Dialog(Frame owner,boolean modal)/modal指明该对话框是否为模指明该对话框是否为模式窗口式窗口 public Dialog(Frame owner,String title,boolean modal)Java2程序设计实用教程(第2版)6.1.2 AWT组件概述组件概述5.标签标签public class Label extends Component implements Accessible public static final int LEFT /左对齐,默认值左对齐,默认值 public static final int CENTER /居中居中 public static final int RIGHT /右对齐右对齐 public Label()public Label(String text)/text指定显示字符串指定显示字符串 public Label(String text,int alignment)/alignment指定对齐方式指定对齐方式 public String getText()/获得显示字符串获得显示字符串 public void setText(String text)/设定显示字符串设定显示字符串Java2程序设计实用教程(第2版)6.1.2 AWT组件概述组件概述6.文本行文本行public class TextField extends TextComponent public TextField()public TextField(String text)public TextField(int columns)public TextField(String text,int columns)/text指定内容,指定内容,columns指定列数指定列数public class TextComponent extends Component implements Accessible public String getText()/获得文本行中的内容获得文本行中的内容 public void setText(String t)/设置文本行中的内容设置文本行中的内容 public void setEditable(boolean b)/设置文本行是否可编辑设置文本行是否可编辑Java2程序设计实用教程(第2版)6.1.2 AWT组件概述组件概述7.按钮按钮public class Button extends Component implements Accessibl public Button(String label)/label指定按钮的标签指定按钮的标签8.错误与异常类错误与异常类【例例6.1】用户登录窗口。用户登录窗口。Java2程序设计实用教程(第2版)6.2 事件处理事件处理1.6.2.1 AWT的委托事件模型的委托事件模型2.6.2.2 AWTEvent事件类事件类3.6.2.3 事件监听器接口和事件适配器类事件监听器接口和事件适配器类Java2程序设计实用教程(第2版)6.2.1 AWT的委托事件模型的委托事件模型1.事件事件事件(事件(event)是指一个状态的改变,或者一个活动的发)是指一个状态的改变,或者一个活动的发生。例如,单击一个按钮,将产生单击事件等。生。例如,单击一个按钮,将产生单击事件等。2.事件类事件类窗口事件类(窗口事件类(WindowEvent)和单击事件类)和单击事件类(ActionEvent)等)等 3.事件源事件源产生事件的组件称为事件源(产生事件的组件称为事件源(event source)。Java2程序设计实用教程(第2版)6.2.1 AWT的委托事件模型的委托事件模型4.事件监听器事件监听器事件源组件注册事件监听器事件源组件注册事件监听器public class Button extends Component implements Accessibl public void addActionListener(ActionListener l)/注册单击事件监听器注册单击事件监听器 public void removeActionListener(ActionListener l)/取消注册单击事件监听器取消注册单击事件监听器例如,例如,button.addActionListener(this);/为按钮注册单击事件监听器为按钮注册单击事件监听器事件处理方法事件处理方法public interface ActionListener extends EventListener public void actionPerformed(ActionEvent e);/单击事件处理方法单击事件处理方法Java2程序设计实用教程(第2版)图图6.3 按钮单击事件的响应及处按钮单击事件的响应及处理流程理流程 Java2程序设计实用教程(第2版)6.2.1 AWT的委托事件模型的委托事件模型【例例6.2】计算器程序雏形。计算器程序雏形。按钮单击事件的响应和处理按钮单击事件的响应和处理关闭窗口事件的响应和处理关闭窗口事件的响应和处理5.图形用户界面的运行由事件驱动图形用户界面的运行由事件驱动不同组件的事件或同一组件的不同事件具有不同组件的事件或同一组件的不同事件具有约定的执行次序。约定的执行次序。各组件的事件处理方法是否执行以及执行次各组件的事件处理方法是否执行以及执行次序,取决于用户操作。序,取决于用户操作。在一个事件处理方法中,程序按照语句的书在一个事件处理方法中,程序按照语句的书写次序顺序执行。写次序顺序执行。Java2程序设计实用教程(第2版)6.2.2 AWTEvent事件类事件类图图6.5 AWT事件类及其层次结构事件类及其层次结构 Java2程序设计实用教程(第2版)6.2.2 AWTEvent事件类事件类public class EventObject implements java.io.Serializable public Object getSource()/返回产生事件的事件源组件返回产生事件的事件源组件 public String toString()/返回事件对象信息返回事件对象信息public class ActionEvent extends AWTEvent public String getActionCommand()/获得按钮的标签获得按钮的标签Java2程序设计实用教程(第2版)6.2.3 事件监听器接口和事件适配事件监听器接口和事件适配器类器类1.事件监听器接口事件监听器接口public interface ComponentListener extends EventListener public void componentResized(ComponentEvent e);/改变组件大小改变组件大小 public void componentMoved(ComponentEvent e);/移动组件移动组件 public void componentShown(ComponentEvent e);/显示组件显示组件 public void componentHidden(ComponentEvent e);/隐藏组件隐藏组件public interface ContainerListener extends EventListener public void componentAdded(ContainerEvent e);/添加组件添加组件 public void componentRemoved(ContainerEvent e);/移动组件移动组件2.事件监听器接口的意义事件监听器接口的意义Java2程序设计实用教程(第2版)3.事件适配器类事件适配器类public abstract class WindowAdapter implements WindowListener,WindowStateListener,WindowFocusListener public void windowOpened(WindowEvent e)public void windowClosing(WindowEvent e)public void windowClosed(WindowEvent e)public void windowIconified(WindowEvent e)public void windowDeiconified(WindowEvent e)public void windowActivated(WindowEvent e)public void windowDeactivated(WindowEvent e)public void windowStateChanged(WindowEvent e)public void windowGainedFocus(WindowEvent e)public void windowLostFocus(WindowEvent e)Java2程序设计实用教程(第2版)4.组件类中注册事件监听器的方组件类中注册事件监听器的方法法public abstract class Component extends Object implements ImageObserver,MenuContainer,Serializable public void addKeyListener(KeyListener l)/注册键盘事件监听器注册键盘事件监听器 public void removeKeyListener(KeyListener l)public void addMouseListener(MouseListener l)/注册鼠标事件监听器注册鼠标事件监听器 public void removeMouseListener(MouseListener l)public void addMouseMotionListener(MouseMotionListener l)/注册鼠标移动事件监听注册鼠标移动事件监听器器 public void removeMouseMotionListener(MouseMotionListener l)Java2程序设计实用教程(第2版)【例例6.3】显示一个三位整数的各显示一个三位整数的各位数字。位数字。1.文本行响应单击事件文本行响应单击事件2.处理输入错误处理输入错误3.使用对话框使用对话框4.窗口关闭事件不能委托其他类处理窗口关闭事件不能委托其他类处理Java2程序设计实用教程(第2版)6.3 布局管理布局管理1.6.3.1 布局管理器类布局管理器类2.6.3.2 容器的布局特性容器的布局特性Java2程序设计实用教程(第2版)6.3.1 布局管理器类布局管理器类1.FlowLayout(流布局管理器)(流布局管理器)public class FlowLayout implements LayoutManager,java.io.Serializable public static final int LEFT =0;/左对齐,类常量,全部大写左对齐,类常量,全部大写 public static final int CENTER=1;/居中居中 public static final int RIGHT =2;/右对齐右对齐 public FlowLayout()/构造方法,默认居中构造方法,默认居中 public FlowLayout(int align)/align参数指定对齐方式参数指定对齐方式 public FlowLayout(int align,int hgap,int vgap)/hgap、vgap参数指定组件之间水平和垂直间距(像素)参数指定组件之间水平和垂直间距(像素)Java2程序设计实用教程(第2版)2.BorderLayout(边布局管理(边布局管理器)器)public class BorderLayout implements LayoutManager2,java.io.Serializable public static final String NORTH =North;public static final String SOUTH =South;public static final String EAST =East;public static final String WEST =West;public static final String CENTER=Center;/注意,字符串首字母大写注意,字符串首字母大写 public BorderLayout()/构造方法,组件之间的间距为构造方法,组件之间的间距为0像素像素 public BorderLayout(int hgap,int vgap)/参数指定组件之间水平和垂直的间距(像素)参数指定组件之间水平和垂直的间距(像素)Java2程序设计实用教程(第2版)3.GridLayout(网格布局管理器)(网格布局管理器)public class GridLayout implements LayoutManager,java.io.Serializable public GridLayout()/构造方法构造方法 public GridLayout(int rows,int cols)/参数指定行、列参数指定行、列 public GridLayout(int rows,int cols,int hgap,int vgap)/后两个参数指定组件之间水平和垂直的间距(像素)后两个参数指定组件之间水平和垂直的间距(像素)Java2程序设计实用教程(第2版)6.3.2 容器的布局特性容器的布局特性1.容器的默认布局管理器容器的默认布局管理器Java2程序设计实用教程(第2版)2.设置容器的布局管理器设置容器的布局管理器1.容器类提供设置布局管理器的方法容器类提供设置布局管理器的方法frame1.setLayout(new FlowLayout(FlowLayout.LEFT);2.创建面板时可指定布局管理器创建面板时可指定布局管理器public class Panel extends Container implements Accessible public Panel()/默认默认FlowLayout布局布局 public Panel(LayoutManager layout)/layout指定布局管理器指定布局管理器3.容器类提供添加和移去组件的方法容器类提供添加和移去组件的方法public Component add(Component comp)/在容器中添加一个组件在容器中添加一个组件public void add(Component comp,Object constraints)/用于用于BorderLayout布局管理器布局管理器public Component add(Component comp,int index)/用于用于GridLayout布局管理器布局管理器Java2程序设计实用教程(第2版)6.4 Swing组件组件1.6.4.1 Swing组件关系概述组件关系概述2.6.4.2 窗口组件窗口组件3.6.4.3 文本显示和编辑组件文本显示和编辑组件4.6.4.4 按钮组件按钮组件5.6.4.5 列表框和组合框组件列表框和组合框组件6.6.4.6 菜单组件菜单组件Java2程序设计实用教程(第2版)6.4.1 Swing组件关系概述组件关系概述Java2程序设计实用教程(第2版)6.4.2 窗口组件窗口组件public void setDefaultCloseOperation(int operation)public interface WindowConstants public static final int DO_NOTHING_ON_CLOSE=0;/什么也不做什么也不做 public static final int HIDE_ON_CLOSE=1;/隐藏窗口隐藏窗口 public static final int DISPOSE_ON_CLOSE=2;/隐藏当前窗口,释放窗口占用的其他资源隐藏当前窗口,释放窗口占用的其他资源 public static final int EXIT_ON_CLOSE=3;/结束程序运行结束程序运行jframe.setDefaultCloseOperation(EXIT_ON_CLOSE);/结束程序运行结束程序运行jdialog.setDefaultCloseOperation(HIDE_ON_CLOSE);/隐藏对话框而不结束程序运行隐藏对话框而不结束程序运行Java2程序设计实用教程(第2版)6.4.3 文本显示和编辑组件文本显示和编辑组件1.文本区文本区public class JTextArea extends JTextComponent public JTextArea()public JTextArea(String text)/参数参数text指定初始显示文本指定初始显示文本 public JTextArea(int rows,int columns)/rows、columns指定行数和列数指定行数和列数 public JTextArea(String text,int rows,int columns)public abstract class JTextComponent extends JComponent implements Scrollable,Accessible public String getText()/获得文本行中的内容获得文本行中的内容 public void setText(String t)/设置文本行中的内容设置文本行中的内容 public void setEditable(boolean b)/设置文本行是否可编辑设置文本行是否可编辑 public boolean isEditable()/判断文本行是否可编辑判断文本行是否可编辑Java2程序设计实用教程(第2版)6.4.3 文本显示和编辑组件文本显示和编辑组件2.文本框的事件处理文本框的事件处理文本编辑事件类文本编辑事件类npublic void addCaretListener(CaretListener l)/注册文本编辑事件监听器n文本编辑事件监听器接口CaretListener中只有一个方法caretUpdate(CaretEvent e)。单击事件类单击事件类ActionEventJava2程序设计实用教程(第2版)6.4.4 按钮组件按钮组件1.复选框复选框public class JCheckBox extends JToggleButton implements Accessible public JCheckBox()public JCheckBox(String text)public JCheckBox(String text,boolean selected)Java2程序设计实用教程(第2版)2.单选按钮单选按钮public class JRadioButton extends JToggleButton implements Accessible public JRadioButton()public JRadioButton(String text)public JRadioButton(String text,boolean selected)public class ButtonGroup extends Object implements Serializable /按钮组类按钮组类 public ButtonGroup()public void add(AbstractButton b)/添加按钮添加按钮 public void remove(AbstractButton b)Java2程序设计实用教程(第2版)3.抽象按钮类抽象按钮类AbstractButtonpublic abstract class AbstractButton extends JComponent implements ItemSelectable,SwingConstants public String getText()public void setText(String text)public boolean isSelected()/返回是否选中状态返回是否选中状态 public void setSelected(boolean b)/设置是否选中状态设置是否选中状态 public void setEnabled(boolean b)/设置是否有效状态设置是否有效状态 public Object getSelectedObjects()/返回选中对象数组返回选中对象数组 public void addActionListener(ActionListener l)/注册按钮的单击事件监听器注册按钮的单击事件监听器 public void removeActionListener(ActionListener l)public void addItemListener(ItemListener l)/注册按钮的选择事件监听器注册按钮的选择事件监听器 public void removeItemListener(ItemListener l)Java2程序设计实用教程(第2版)4.选项按钮的选择事件处理选项按钮的选择事件处理public void addItemListener(ItemListener l)/注册选择事件监听器注册选择事件监听器Java2程序设计实用教程(第2版)6.4.5 列表框和组合框组件列表框和组合框组件1.列表框列表框public class JList extends JComponent implements Scrollable,Accessible public JList()public JList(final Object listData)/列表框中的数据项由对象数组提供列表框中的数据项由对象数组提供 public int getSelectedIndex()/返回第返回第1个选中数据项的序号,从个选中数据项的序号,从0开始;没有选中时返回开始;没有选中时返回-1 public Object getSelectedValue()/返回列表框第返回列表框第1个选中数据项对象;没有选中时返回个选中数据项对象;没有选中时返回null public void setListData(final Object listData)/重新设置列表框中的数据项重新设置列表框中的数据项例如,例如,Object area=南京市南京市,苏州市苏州市,无锡市无锡市;JList list_user=new JList(area);Java2程序设计实用教程(第2版)2.组合框组合框public class JComboBox extends JComponent implements ItemSelectable,ListDataListener,ActionListener,Accessible public JComboBox()public JComboBox(final Object items)/组合框中的数据项由对象数组提供组合框中的数据项由对象数组提供 public void addItem(Object anObject)/添加数据项添加数据项 public Object getSelectedItem()/返回选中数据项对象返回选中数据项对象 public int getSelectedIndex()/返回选中数据项索引返回选中数据项索引Java2程序设计实用教程(第2版)【例例6.4】输入用户信息。输入用户信息。1.框架窗口采取关闭时结束程序运行方式框架窗口采取关闭时结束程序运行方式2.使用单选按钮使用单选按钮3.组合框的选择事件处理组合框的选择事件处理Java2程序设计实用教程(第2版)6.4.6 菜单组件菜单组件1.使用菜单的两种方式使用菜单的两种方式窗口菜单窗口菜单快捷菜单快捷菜单Java2程序设计实用教程(第2版)2.菜单栏菜单栏public class JMenuBar extends JComponent implements Accessible,MenuElement public JMenuBar()public JMenu add(JMenu c)/添加菜单添加菜单Frame类提供类提供setJMenuBar()方法将菜单栏放置在框架方法将菜单栏放置在框架窗口上方,该方法声明如下:窗口上方,该方法声明如下:public void setJMenuBar(JMenuBar menubar)Java2程序设计实用教程(第2版)3.菜单菜单public class JMenu extends JMenuItem implements Accessible,MenuElement public JMenu()public JMenu(String s)/s指定菜单标题指定菜单标题 public JMenuItem add(JMenuItem menuItem)/添加菜单项添加菜单项 public Component add(Component c)/添加组件添加组件 public void addSeparator()/添加分隔线添加分隔线Java2程序设计实用教程(第2版)4.菜单项菜单项public class JMenuItem extends AbstractButton implements Accessible,MenuElement public JMenuItem()public JMenuItem(String text)/text指定菜单标题指定菜单标题 public JMenuItem(String text,Icon icon)/icon指定菜单图标指定菜单图标 public void setAccelerator(KeyStroke keyStroke)/设置快捷键设置快捷键Java2程序设计实用教程(第2版)5.选择菜单项选择菜单项1.复选菜单项复选菜单项public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants,Accessible public JCheckBoxMenuItem()public JCheckBoxMenuItem(String text)/text指定标题指定标题 public JCheckBoxMenuItem(String text,boolean b)/b指定初始状态指定初始状态 public JCheckBoxMenuItem(String text,Icon icon,boolean b)/icon指定图标指定图标Java2程序设计实用教程(第2版)5.选择菜单项选择菜单项2.单选菜单项单选菜单项public class JRadioButtonMenuItem extends JMenuItem implements Accessible public JRadioButtonMenuItem()public JRadioButtonMenuItem(String text)public JRadioButtonMenuItem(String text,boolean selected)public JRadioButtonMenuItem(String text,Icon icon,boolean selected)Java2程序设计实用教程(第2版)6.快捷菜单快捷菜单public class JPopupMenu extends JComponent implements Accessible,MenuElement public JPopupMenu()public JMenuItem add(JMenuItem menuItem)/添加菜单项添加菜单项 public void addSeparator()/添加分隔线添加分隔线 public void show(Component invoker,int x,int y)/在在(x,y)位置处显示快捷菜单,位置处显示快捷菜单,invoker指定快捷菜单所依附的组件指定快捷菜单所依附的组件组件类提供下列组件类提供下列add()方法用于任何组件添加快捷菜单:方法用于任何组件添加快捷菜单:public void add(PopupMenu popup)/添加快捷菜单添加快捷菜单Java2程序设计实用教程(第2版)【例例6.5】文本编辑器。文本编辑器。1.对话框采取关闭时隐藏方式对话框采取关闭时隐藏方式2.使用窗口菜单使用窗口菜单3.使用快捷菜单使用快捷菜单4.使用字体类使用字体类5.当字号值不合适时抛出异常当字号值不合适时抛出异常throw new Exception(“SizeException”);/抛出异常对象抛出异常对象catch(Exception ex)if(ex.getMessage()=SizeException)/捕获自己抛出的异常对象捕获自己抛出的异常对象Java2程序设计实用教程(第2版)6.5 图形设计图形设计1.6.5.1 绘图类绘图类2.6.5.2 在组件上绘图在组件上绘图Java2程序设计实用教程(第2版)6.5.1 绘图类绘图类public abstract class Graphics extends Object public abstract Color getColor();/获取当前颜色获取当前颜色 public abstract void setColor(Color c);/设置颜色设置颜色 public abstract void drawLine(int x1,int y1,int x2,int y2);/在两点在两点(x1,y1)、(x2,y2)间画一条直线间画一条直线 public void drawRect(int x,int y,int width,int height)/画矩形画矩形 public abstract void fillRect(int x,int y,int width,int height);/填充矩形填充矩形 public abstract void clearRect(int x,int y,int width,int height);/清除矩形清除矩形 /(x,y)指定矩形左上角坐标,指定矩形左上角坐标,width、height指定矩形的宽度和高度指定矩形的宽度和高度 public abstract void drawOval(int x,int y,int width,int height);/画椭圆画椭圆 public abstract void fillOval(int x,int y,int width,int height);/填充椭圆填充椭圆 /(x,y)、width、height指定椭圆外切矩形的左上角坐标、长度和宽度。当指定椭圆外切矩形的左上角坐标、长度和宽度。当width=height时,圆时,圆 public abstract void drawString(String str,int x,int y);/在在(x,y)指定坐标位置显示字符串指定坐标位置显示字符串 public abstract Font getFont();/获得颜色获得颜色 p