《Java上第十章GUI编程之AW.ppt》由会员分享,可在线阅读,更多相关《Java上第十章GUI编程之AW.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十章GUI编程之编程之AWT学习目标学习目标能够熟练的创建和管理窗口,管理字体和颜色、输出文本和使用图形。能够熟练的使用AWT中的各种组件,如按扭、文本框以及系统托盘和启动画面等。理解java的事件处理机制,熟练使用事件做出反应灵敏的图形化界面。AWTAWT类的层次结构类的层次结构ComponentComponent类类-1-1 Component类是AWT中最上层的根类,所以了解Component类提供的方法对于学习AWT的组件来说是必要的。成员方法:public Color getBackground()public void setBackground(Color c)public C
2、olor getForeground()public void setForeground(Color c)ComponentComponent类类-2-2成员方法:public Font getFont()public void setFont(Font f)public FontMetrics getFontMetrics(Font font)public Dimension getSize()public void setSize(Dimension d)public void setSize(int width,int height)ComponentComponent类类-3-3成员
3、方法:public Point getLocation()public void setLocation(int x,int y)public Rectangle getBounds()public void setBounds(int x,int y,int w,int h)public boolean isVisible()public void setVisible(boolean b)public boolean isEnabled()public void setEnabled(boolean b)ComponentComponent类类-4-4成员方法:public void pa
4、int(Graphics g)public void repaint()public void update(Graphics g)public Container getParent()public Cursor getCursor()public void setCursor(Cursor cursor)public Toolkit getToolkit()ComponentComponent类类-5-5成员方法:public Dimension getMaximumSize()public Dimension getMinimumSize()public Dimension getPre
5、ferredSize()public Image createImage(int width,int height)上述方法是Component类中比较常用的行为,其它方法请参照API 文档。ContainerContainer类类-1-1 Container类是一种特殊的Component,它可以容纳其他的Component。成员方法:public LayoutManager getLayout()public void setLayout(LayoutManager mgr)public Component add(Component comp)public void add(Compon
6、ent comp,Object constraints)ContainerContainer类类-2-2成员方法:public void remove(Component comp)public void remove(int index)public void removeAll()public void validate()public Component getComponents()上述方法是Container类中比较常用的行为,其它方法请参照API 文档。WindowWindow类类-1-1 Window是AWT的窗口类,它的特点是无标题栏、无边框、无最大最小和关闭按钮、不能在可视化
7、状态下改变其外观。成员方法:public void dispose()public void pack()public void show()WindowWindow类类-2-2成员方法:public void addWindowListener(WindowListener l)public void removeWindowListener(WindowListener l)上述方法是Window类中比较常用的行为,其它方法请参照API 文档。FrameFrame类类-1-1 Frame是Window的子类,是AWT界面的根窗体,包含标题栏、边框、最大最小和关闭按扭等,默认布局是Borde
8、rLayout。构造方法:public Frame()public Frame(String title)FrameFrame类类-2-2成员方法:public String getTitle()public void setTitle(String title)public boolean isResizable()public void setResizable(boolean resizable)public MenuBar getMenuBar()public void setMenuBar(MenuBar mb)其它方法请参照API文档。LabelLabel类类-1-1 Label是
9、使用最简单的一种组件,它包含一个它要显示的字符串。成员:public static final int LEFTpublic static final int CENTERpublic static final int RIGHTLabelLabel类类-2-2构造方法:public Label()public Label(String text)public Label(String text,int alignment)成员方法:public String getText()public void setText(String text)LabelLabel类类-3-3成员方法:publi
10、c int getAlignment()public void setAlignment(int alignment)其它方法参照API文档。ButtonButton类类-1-1 Button是使用最广泛的组件-按钮,它包含一个显示其上的标签。构造方法:public Button()public Button(String label)成员方法:public String getLabel()public void setLabel(String label)ButtonButton类类-2-2成员方法:public void addActionListener(ActionListener
11、listener)public void removeActionListener(ActionListener listener)其它方法参照API文档。布局管理器布局管理器-1-1 布局管理器是容器管理其中组件的一种方法,用于在容器内按照一定的顺序来排列组件。AWT中一共有五大布局管理器。(1)GridLayout用于将容器平均分配成m行n行。注意,如果添加的组件数量与前面分配 的数量有较大差,会导致GridLayout的行列数发生自动修正。布局管理器布局管理器-2-2范例解析:AWTSimple.javaimport java.awt.*;public class AWTSimple p
12、rivate Frame f;private Button b1,b2,b3;public AWTSampl()f=new Frame(AWTSimple testing);b1=new Button(A);b2=new Button(B);布局管理器布局管理器-3-3 b3=new Button(C);f.setLayout(new GridLayout(3,1,10,10);f.add(b1);f.add(b2);f.add(b3);f.setSize(400,300);f.setVisible(true);布局管理器布局管理器-3-3 public static void main(St
13、ring args)AWTSimple x=new AWTSimple();上述代码能够生成一个简单AWT界面,包含三个按钮。布局管理器布局管理器-4-4 (2)BorderLayout用于将容器按东南西北中五个方向进行分配。成员:public static final String NORTHpublic static final String SOUTH public static final String WESTpublic static final String EASTpublic static final String CENTER布局管理器布局管理器-5-5构造方法:publi
14、c BorderLayout()public BorderLayout(int hgap,int vgap)练习:完成下图。布局管理器布局管理器-6-6 (3)FlowLayout摆放组件的方式是从按照对齐方式顺序排列。当一行上不再能放下更多的组件时,下一个组件将被摆放在下一行。成员:public static final int LEFTpublic static final int RIGHTpublic static final int CENTER布局管理器布局管理器-7-7构造方法:public FlowLayout()public FlowLayout(int align)publ
15、ic FlowLayout(int align,int hgap,int vgap)布局管理器布局管理器-8-8 (4)还有两种布局管理器CardLayout和GridBagLayout不常用,请自行参照API。(5)空布局,就是将容器的布局管理器设置为null。对于空布局的容器,添加组件前,必须先指明组件在容器中的起始位置以及大小,然后才能添加到组件中。练习:使用空布局完成一个GUI界面设计。PanelPanel类类 Panel是个容器,它可以将容纳其他的容器(Frame除外)和组件,默认布局管理局FlowLayout。Panel中可以摆放若干组件,然后将Panel作为一个组件放入底层容器,
16、这样就可以做出各种各样的GUI界面。构造方法:public Panel()public Panel(LayoutManager layout)练习:使用Panel类完成GUI界面设计。事件处理事件处理 Java中的事件处理模型分成两类,分别是等级事件模型和委托事件模型。在JDK 1.1.8之后,java全部采用委托事件模型来处理事件,在委托事件模型的处理机制中,一次典型的事件处理过程涉及三类对象。事件源对象事件对象事件监听器对象EventObjectEventObject类类 EventObject类是awt中事件类的最上层根类。构造方法:public EventObject(Object s
17、ource)成员方法:public Object getSource()事件类层次关系事件类层次关系监听器层次关系监听器层次关系范例解析范例解析 练习:为Button添加事件处理。在完成GUI界面设计后添加如下四步:导入包。定义监听器对象。对事件源添加监听器。覆盖监听器接口的方法。事件监听器的适配器类事件监听器的适配器类WindowListenerWindowListener接口接口成员方法:public void windowClosing(WindowEvent e)public void windowActivated(WindowEvent e)public void windowDe
18、activated(WindowEvent e)public void windowIconified(WindowEvent e)public void windowDeiconified(WindowEvent e)public void windowOpened(WindowEvent e)public void windowClosed(WindowEvent e)ComponentListenerComponentListener接口接口成员方法:public void componentHidden(ComponentEvent e)public void componentMov
19、ed(ComponentEvent e)public void componentResized(ComponentEvent e)public void componentShown(ComponentEvent e)ContainerListenerContainerListener接口接口成员方法:public void componentAdded(ContainerEvent e)public void componentRemoved(ContainerEvent e)TextComponentTextComponent类类-1-1 TextComponent类中定义了AWT中两种
20、文字输入组件共用的一些方法。成员方法:public String getText()public void setText(String t)public int getSelectionStart()public void setSelectionStart(int selectionStart)TextComponentTextComponent类类-2-2成员方法:public int getSelectionEnd()public void setSelectionEnd(int selectionEnd)public String getSelectedText()public vo
21、id select(int selectionStart,int selectionEnd)public void selectAll()public boolean isEditable()public void setEditable(boolean b)TextComponentTextComponent类类-3-3成员方法:public void addTextListener(TextListener l)public void removeTextListener(TextListener l)TextFieldTextField类类-1-1 TextField是TextCompo
22、nent类的子类,实现了一个单行的文本输入区域,通常称为“文本框”。构造方法:public TextField()public TextField(String text)TextFieldTextField类类-2-2成员方法:public char getEchoChar()public void setEchoChar(char c)public boolean echoCharIsSet()public void addActionListener(ActionListener l)public void removeActionListener(ActionListener l)练习
23、:完成 一个简单加减乘除计算机器。TextAreaTextArea类类 TextArea是多行的“文本区”。构造方法:public TextArea()public TextArea(String text)成员方法:public void append(String str)public void insert(String str,int pos)public void replaceRange(String s,int start,int end)复选框和单选复选框和单选按钮按钮 复选框:Checkbox类 单选按钮:是将若干Checkbox归为一个组,则同一个组中的Checkbox有互
24、斥关系。练习:完成下图。下拉列表和列表下拉列表和列表 下拉列表:Choice类。列表:List类。练习:完成下图。对话框对话框 DialogDialog类类-1-1 用户经常会遇到这样的情况,那就是需要使用对话框来容纳一系列相关的组件。对话框主要用于得到用户的输入内容。它们与Frame窗口非常类似,只不过对话框总是顶级窗口的子窗口中。在其他方面,对话框的功能与Frame窗口非常相似。例如,给对话框添加组件的方法就与给Frame窗口添加组件的方法完全一致。对话框对话框 DialogDialog类类-2-2构造方法:public Dialog(Frame owner,String title,bo
25、olean modal)public Dialog(Dialog owner,String title,boolean modal)成员方法:public String getTitle()public void setTitle(String title)对话框对话框 DialogDialog类类-3-3成员方法:public boolean isResizable()public void setResizable(boolean resizable)public void setVisible(boolean b)public boolean isModal()public void s
26、etModal(boolean b)对话框对话框 FileDialogFileDialog类类-1-1 Java提供了内置的文件选择对话框让用户指定文件。要创建一个文件对话框,实例化FileDialog类型的对象。它可以使文件对话框显示出来。成员:public static final int LOADpublic static final int SAVE对话框对话框 FileDialogFileDialog类类-2-2构造方法:public FileDialog(Frame parent,String title,int mode)成员方法:public String getDirecto
27、ry()public void setDirectory(String dir)public String getFile()public void setFile(String file)对话框对话框 FileDialogFileDialog类类-3-3成员方法:public int getMode()public void setMode(int mode)public FilenameFilter getFilenameFilter()public void setFilenameFilter(FilenameFilter filter)练习:完成 对FileDialog类的测试。菜单类
28、层次关系菜单类层次关系菜单类组件菜单类组件菜单栏 MenuBar菜单 Menu菜单项 MenuItem可核选式菜单项 CheckboxMenuItem弹出式菜单 PopupMenu菜单组件范例解析菜单组件范例解析桌面桌面API-1API-1 桌面API有助于无缝地把Java应用程序与桌面集成到一起,主要有三个功能:1、支持Java应用程序使用一个特定的统一资源标识符(URI)启动操作系统的缺省的浏览器;2、启动操作系统缺省的电子邮件客户端;3、启动应用程序以打开、编辑或打印与该应用程序相关联的文件。桌面桌面API-2API-2 练习:使用Desktop类完成三个功能:(1)启动浏览器显示一个H
29、TML页;(2)启动系统默认的电子邮件客户端;(3)启动应用程序以打开、编辑相关文件。系统托盘系统托盘-1-1 桌面的系统托盘在 Microsoft Windows 上,它被称为“任务栏状态区域”。每个 Java 应用程序都有一个 SystemTray 实例,在应用程序运行时,它允许应用程序与桌面系统托盘建立连接。TrayIcon 对象表示可以添加到系统托盘的托盘图标。TrayIcon 可以包含工具提示、图像、弹出菜单和一组与之关联的监听器。系统托盘系统托盘-2-2 练习:完成右图中的GUI界面,并为该应用提供系统托盘的功能。要求写两个文件,一个是能够生成系统托盘的工厂类,另一个完成下图的内容
30、。系统启动画面系统启动画面-1-1 现在很多软件在启动时都有初始化过程,有时初始化的时间会很长,如Photoshop、Flash等,为了让用户有耐心继续等待,不要误以为死机了,这些软件在初始化之前总是显示一个图形界面来告诉用户软件正在做什么,这就是“系统 启动画面”。在JDK 1.6中提供了一个简单的方法,可以不添加一行代码,而且在界面要改变时还不需要重新编译源程序。系统启动画面系统启动画面-2-2范例解析:import java.awt.Frame;public class TestSplash extends Frame public static void main(String arg
31、s)TestSplash x=new TestSplash();public TestSplash()try /程序在此位置阻塞3000毫秒Thread.sleep(3000);系统启动画面系统启动画面-3-3 catch(InterruptedException e)e.printStackTrace();initialize();private void initialize()this.setSize(300,200);this.setTitle(test splash);this.setVisible(true);系统启动画面系统启动画面-4-4 为了让我们上面的程序在运行时能够显示启
32、动画面,需要为它配置一下启动参数,例如:java-splash:files/start.jpg TestSplash 字体和颜色字体和颜色 在AWT中有一些虽然不是组件,但是它们是组件相关的支持类,非常重要,比如组件的颜色、组件上文字的字体等。(1)Font 代表字体类。(2)Color 代表颜色类。滚动面板和滚动条(附加)滚动面板和滚动条(附加)(1)ScrollPane代表的组件是滚动面板,当滚动面板中容纳的组件大于滚动面板的外观尺寸时,滚动面板可以出现滚动条用于让用户可以调节面板中显示的内容。(2)Scrollbar是滚动条,用来在指定的最小值和最大值之间选择连续数值。(3)滚动条能够触
33、发的事件是AdjustmentEvent。低级事件和焦点事件(附加)低级事件和焦点事件(附加)鼠标事件 MouseEvent监听器 MouseListener、MouseMotionListener键盘事件 KeyEvent监听器 KeyListener焦点事件 FocusEvent监听器 FocusListener控制鼠标指针形状(附加)控制鼠标指针形状(附加)-1-1 在Component类中有一个setCursor方法用于设置鼠标指针的形状,调用时需要传递一个Cursor对象。控制鼠标指针形状(附加)控制鼠标指针形状(附加)-2-2构造方法:public Cursor(int type)public static Cursor getPredefinedCursor(int type)练习:写一段程序,实现功能是:当鼠标进入Label区域内时,鼠标形状变成“手”状。小结小结 本单元详细讲述了图形界面的基础部分-AWT,涉及到十余种组件,除组件相关的方法外,还需要大家掌握的是布局管理器以及颜色、字体等支持类的使用。对于在JDK 1.6中出现的系统桌面、系统托盘和启动画面三部分内容,大家应该熟练掌握。事件处理机制是GUI编程中的重点,应该理解事件处理的过程,能够灵活运用。谢谢 谢!谢!
限制150内