黑马程序员_GUI(布局,Frame,事件监听机制,对话框Dialog,菜单,打开和保存文件)

来源:互联网 发布:网络咨询医生聊天技巧 编辑:程序博客网 时间:2024/05/02 04:32
--------- android培训java培训、期待与您交流!---------


一 GUI概述

1.GUI图形用户界面

  1)GUI
  Graphical User Interface(图形用户接口)
  用图形的方式,来显示计算机操作的界面,这样更方便更直观。
  2)CLI
  Command line User Interface(命令行用户接口)
  就是常见的Dos命令行操作。
  需要记忆一些常用的命令,操作不直观。
  3)举例:
  比如:创建文件夹,或者删除文件夹等。
  4)Javao GUI提供的对象都存在java.awt和javax.swing两个包中。

 

2.awt和swing

  1)java.awt:Abstract Window ToolKit(抽象窗口工具包),

  需要调用本地系统方法实现功能。属重量级控件。
  2)javax.swing:在awt的基础上,建立的一套图形界面系统,
  其中提供了更多的组件,而且完全由java实现。增强了移植性,
  属轻量级控件。
  3)swt:由eclipse小组开发的,需要下载。

 3.继承关系图;
  Component
   |---Container
    |---Window
     |---Frame
     |---Dialog
      |---FileDialog
   |---Button
   |---Label
   |---Checkbox
   |---TextComponent
    |---TextArea

    |---TextField


二.GUI(布局)布局管理器

 1.容器中的组件的排放方式,就是布局。
 2.常见的布局管理器:
  1)FlowLayout(流式布局管理器)
  <1>从左到右的顺序排列。每行的第一个组件居中(可设置偏左还是偏右)
  <2>Panel默认的布局管理器。
  2)BorderLayout(边界布局管理器)
  <1>东,南,西,北,中。如果没有指定组件的东南西北,组件会以整个最大面积填充窗体。再添加的新组件则覆盖。
  <2>Frame默认的布局管理器
  3)GridLayou(网格布局管理器)
  规则的矩阵,先划分好了格子,每个组件放在格子当中,如:计算器。
  4)CardLayout(卡片布局管理器)
  选项卡,如:我的电脑的属性窗体
  5)GridBagLayou(网格包布局管理器)
  非规则的矩阵,一个组件可能占据多个格子。如:计算器。
  6)坐标式布局:
  可以随便放随便选择对齐方式。如:eclipse + 图形化界面插件
  有一个画布,组件在周围列着,随便往里拖组件,一切换到代码试图,代码全生成。

三.GUI(Frame)
1.创建图形化界面步骤.
  1)创建frame窗体。
  2)对窗体进行基本设置。比如:大小,位置,布局等。
  3)定义组件。
  4)将组件通过窗体的add方法添加到窗体中。
  5)让窗体显示,通过setVisible(true)
 
2.Component ---> Container --->Window ---> Frame(java.awt包)
  1)Frame 是带有标题和边框的顶层窗口。 
  窗体的默认布局为 BorderLayout。
  2)构造方法摘要 
  <1>Frame() 
     构造一个最初不可见的 Frame 新实例()。 
  <2>Frame(GraphicsConfiguration gc) 
     使用指定的 GraphicsConfiguration 构造一个最初不可见的新 Frame。 
  <3>Frame(String title) 
     构造一个新的、最初不可见的、具有指定标题的 Frame 对象。 
  <4>Frame(String title, GraphicsConfiguration gc) 
     构造一个新的、初始不可见的、具有指定标题和 GraphicsConfiguration 的 Frame 对象。 
  3)特有方法:
  void setTitle(String title) 
     将此窗体的标题设置为指定的字符串。

四.GUI(事件监听机制)

 1.建立一个简单的窗体
  1)Container常用子类:Window Panel(面板,不能单独存在。)
  2)Window常用子类:Frame Dialog
  3)简单的窗体创建过程:
  Frame f = new Frame("my window");
  f.setLayout(new FlowLayout());
  f.setSize(500,400);//设置窗体大小
  f.setLocation(300,200);//设置窗体出现在屏幕的位置。
  f.setVisible(true);
 2.事件监听机制的组成和特点:
  1)事件源(组件)。
  2)事件(Event)。
  3)监听器(Listener)。
  4)事件处理(引发事件后处理方式)。
 事件源:就是awt包或者swing包中的那些图形界面组件。
 事件:每一个事件源都有自己特有的对应事件和共性事件。
 监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中。
 以上三者,在java中都已经定义好了。 直接获取其对象来用就可以了。
 我们要做的事情就是,对产生的动作进行处理。

五.GUI(窗体事件)

1.明确事件源:窗体
2.注册监听器
 1)在父类Window(窗口)中找到相关方法:
  void addWindowListener(WindowListener l) 
     添加指定的窗口侦听器,以从此窗口接收窗口事件。 
2)接口WindowListener(java.awt.event包)
 <1>用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),
 要么扩展抽象类 WindowAdapter(仅重写所需的方法)。然后使用窗口的 addWindowListener 方法
 将从该类所创建的侦听器对象向该 Window 注册。当通过打开、关闭、激活或停用、图标化或取消
 图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法
 <2>方法摘要 
  void windowActivated(WindowEvent e) 
     将 Window 设置为活动 Window 时调用。 
  void windowClosed(WindowEvent e) 
     因对窗口调用 dispose 而将其关闭时调用。 
  void windowClosing(WindowEvent e) 
     用户试图从窗口的系统菜单中关闭窗口时调用。 
  void windowDeactivated(WindowEvent e) 
     当 Window 不再是活动 Window 时调用。 
  void windowDeiconified(WindowEvent e) 
     窗口从最小化状态变为正常状态时调用。 
  void windowIconified(WindowEvent e) 
     窗口从正常状态变为最小化状态时调用。 
  void windowOpened(WindowEvent e) 
     窗口首次变为可见时调用。 
3)WindowListener  ---> WindowAdapter(抽象类 ,java.awt.event 包)
 <1>接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。 
 扩展此类可创建 WindowEvent 侦听器并为所需事件重写该方法。(如果要实现 WindowListener 接口,
 则必须定义该接口内的所有方法。此抽象类将所有方法都定义为 null,所以只需针对关心的事件定义方法。) 
 使用扩展的类可以创建侦听器对象,然后使用窗口的 addWindowListener 方法向该窗口注册侦听器。
 当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,
 并将 WindowEvent 传递给该方法。
<2>该类复写了WindowListener中的所有方法,而且都是非抽象方法。
  抽象类中没有抽象方法,因为复写的方法为null,所以该类创建对象没有意义,
  故将类抽象,方便创建监听器对象。该类的子类只需覆盖需要的方法即可。
  若子类只是实现父类接口WindowListener的话,要复写全部方法。
3.代码示例:
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

六.GUI(Action事件)
 1.Component类中方法:
  void setBounds(int x, int y, int width, int height) 
     移动组件并调整其大小。 此方法相当于setSize()+setLocation();
 2.Component ----> Button类(java.awt包)
  1)此类创建一个标签按钮。
  2)构造方法摘要 
  Button() 
     构造一个标签字符串为空的按钮。 
  Button(String label) 
     构造一个带指定标签的按钮。 
  3)特有方法
  void addActionListener(ActionListener l) 
     添加指定的动作侦听器,以接收发自此按钮的动作事件。 
  4)接口ActionListener(在java.awt.event包中)
   <1>用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,
  而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。
  在发生操作事件时,调用该对象的 actionPerformed 方法。
   <2>方法摘要 
  void actionPerformed(ActionEvent e) 
     发生操作时调用。 
   <3>注意:因为该接口中只有一个抽象方法,故不需要配置类,直接定义子类实现并复写即可。

七.GUI(鼠标事件)

 1.Component中的特有方法:
  1)void addKeyListener(KeyListener l) 
     添加指定的按键侦听器,以接收发自此组件的按键事件。 
  2)void addMouseListener(MouseListener l) 
     添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。 
 2.接口MouseListener(java.awt.event包)
  1)用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。
    (要跟踪鼠标移动和鼠标拖动,请使用 MouseMotionListener。) 
  旨在处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 MouseAdapter
  (仅重写所需的方法)。 
  然后使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。
  当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件
  。发生鼠标事件时,将调用该侦听器对象中的相应方法,并将 MouseEvent 传递给该方法。
  2)方法摘要 
  void mouseClicked(MouseEvent e) 
     鼠标按键在组件上单击(按下并释放)时调用。 
  void mouseEntered(MouseEvent e) 
     鼠标进入到组件上时调用。 
  void mouseExited(MouseEvent e) 
     鼠标离开组件时调用。 
  void mousePressed(MouseEvent e) 
     鼠标按键在组件上按下时调用。 
  void mouseReleased(MouseEvent e) 
     鼠标按钮在组件上释放时调用。 
 3)MouseListener ---> MouseAdapter 接口的适配器
 3.MouseEvent类(java.awt.event包)
  1)指示组件中发生鼠标动作的事件。当且仅当动作发生时鼠标光标处于特定组件边界未被遮掩的部分上,
  才认为在该组件上发生了鼠标动作
  2)特有方法:
  int getButton() 
     返回更改了状态的鼠标按键(如果有)。 
  int getClickCount() 

     返回与此事件关联的鼠标单击次数。 


八.GUI(键盘事件)

 1.Component中的特有方法:
  1)void addKeyListener(KeyListener l) 
     添加指定的按键侦听器,以接收发自此组件的按键事件。 
  2)void addMouseListener(MouseListener l) 
     添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。
 2.接口KeyListener(java.awt.event包)
  1)用于接收键盘事件(击键)的侦听器接口。旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),
  要么扩展抽象 KeyAdapter 类(仅重写有用的方法)。 
  然后使用组件的 addKeyListener 方法将从该类所创建的侦听器对象向该组件注册。
  按下、释放或键入键时生成键盘事件。然后调用侦听器对象中的相关方法并将该 KeyEvent 传递给它。 
  2)方法摘要 
  void keyPressed(KeyEvent e) 
     按下某个键时调用此方法。 
  void keyReleased(KeyEvent e) 
     释放某个键时调用此方法。 
  void keyTyped(KeyEvent e) 
     键入某个键时调用此方法。 
  3)KeyListener ---> KeyAdapter 适配器。
 3.InputEvent ---> KeyEvent类(java.awt.event包)
  1)表示组件中发生键击的事件。 
  当按下、释放或键入某个键时,组件对象(如文本字段)将生成此低级别事件
  2)字段摘要
  static int VK_0 
     VK_0 到 VK_9 与 ASCII 的‘0’到‘9’(0x30 - 0x39) 相同 
  static int VK_A 
     VK_A 到 VK_Z 与 ASCII 的‘A’到‘Z’(0x41 - 0x5A) 相同 
  static int VK_AT 
     用于 "@" 键的常量。 
  static int VK_BACK_SPACE 
  static int VK_CAPS_LOCK 
  static int VK_CONTROL 
  static int VK_DELETE 
  static int VK_DOWN 
     用于非数字键盘向下方向键的常量。                         
  static int VK_ENTER 
  static int VK_END 
  static int VK_INSERT 
  static int VK_TAB 
  3)特有方法:
  char getKeyChar() 
     返回与此事件中的键关联的字符。 
  int getKeyCode() 
     返回与此事件中的键关联的整数 keyCode。 
  void setKeyChar(char keyChar) 
     设置 keyCode 值,以表示某个逻辑字符。 
  void setKeyCode(int keyCode) 
     设置 keyCode 值,以表示某个物理键。 
  static String getKeyText(int keyCode) 
     返回描述 keyCode 的 String,如 "HOME"、"F1" 或 "A"。 
  boolean isActionKey() 

    返回此事件中的键是否为“动作”键。 

4.InputEvent类(java.awt.event包).

   1)所有组件级别输入事件的根事件类。 输入事件通常由产生输入事件的源代码进行处理,而在此之前,
   将他们提交到侦听器中。这样就允许侦听器和组件子类“使用”事件,以便源代码不会以默认方式处理事件。
   例如,在 Button 组件上使用 mousePressed 事件将阻止 Button 被激活。
   2)方法摘要 
  void consume() 
     使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件 
  boolean isAltDown() 
     返回 Alt 修饰符在此事件上是否为 down。 
  boolean isControlDown() 
     返回 Control 修饰符在此事件上是为 down。 
  boolean isShiftDown() 
     返回 Shift 修饰符在此事件上是否为 down。
     
 5.Component ---> TextComponent ---> TextField(java.awt包)
  1)TextField 对象是允许编辑单行文本的文本组件。
  2)构造方法摘要 
  TextField() 
     构造新文本字段。 
  TextField(int columns) 
     构造具有指定列数的新空文本字段。 
  TextField(String text) 
     构造使用指定文本初始化的新文本字段。 
  TextField(String text, int columns) 
     构造使用要显示的指定文本初始化的新文本字段,宽度足够容纳指定列数。 
  3)特有方法
  int getColumns() 
     获取此文本字段中的列数。 
  void setText(String t) 
     将此文本组件显示的文本设置为指定文本。 
  void setColumns(int columns) 
     设置此文本字段中的列数。
九.GUI(对话框Dialog)

1.Component ---> Container ---> Window --->Dialog(java.awt包)
  1Dialog 是一个带标题和边界的顶层窗口,边界一般用于从用户处获得某种形式的输入。
  Dialog 的大小包括边界所指定的任何区域。
  2)构造方法摘要 
  Dialog(Dialog owner, String title, boolean modal) 
     构造一个最初不可见的 Dialog,它带有指定的所有者 Dialog、标题和模式。
  Dialog(Frame owner, String title, boolean modal) 
     构造一个最初不可见的 Dialog,它带有指定的所有者 Frame、标题和模式。
  3)方法摘要 
  void setTitle(String title) 
     设置 Dialog 的标题。 
  String getTitle() 
     获取 dialog 的标题。 
  boolean isModal() 
     指出 dialog 是否为有模式的。 
  void setModal(boolean modal) 

   指定此 dialog 是否应该是有模式的。 

 2.Component ---> Label类(java.awt包)
  1)Label 对象是一个可在容器中放置文本的组件。一个标签只显示一行只读文本。
  文本可由应用程序更改,但是用户不能直接对其进行编辑。
  2)构造方法摘要 
  Label() 
     构造一个空标签。 
  Label(String text) 
     使用指定的文本字符串构造一个新的标签,其文本对齐方式为左对齐。 
  Label(String text, int alignment) 
     构造一个显示指定的文本字符串的新标签,其文本对齐方式为指定的方式。 
  3)方法摘要 
  void setText(String text) 
     将此标签的文本设置为指定的文本。 
  int getAlignment() 
     获取此标签的当前对齐方式。 
  String getText() 
     获取此标签的文本。 

十.GUI(菜单)

1.Frame类中的方法:
  void setMenuBar(MenuBar mb) 
     将此窗体的菜单栏设置为指定的菜单栏。 
 2.MeunComponent ---> MenuBar类
  1)MenuBar 类封装绑定到框架的菜单栏的平台概念。为了将该菜单栏与 Frame 对象关联,
  可以调用该框架的 setMenuBar 方法。
  2) 构造方法摘要 
  MenuBar() 
     创建新的菜单栏。 
  3)方法摘要 
  Menu add(Menu m) 
     将指定的菜单添加到菜单栏。
     
 3.MenuComponent ---> MenuItem ---> Menu类
  1)Menu 对象是从菜单栏部署的下拉式菜单组件。 
  菜单可以是任意分离式 菜单。可以打开分离式菜单,并从其父菜单栏或菜单中拖开。
  释放鼠标按钮之后,它仍然在屏幕上
  2)构造方法摘要 
  Menu() 
     构造具有空标签的新菜单。 
  Menu(String label) 
     构造具有指定标签的新菜单。 
  Menu(String label, boolean tearOff) 
     构造具有指定标签的新菜单,指示该菜单是否可以分离。 
  3)方法摘要 
  MenuItem add(MenuItem mi) 
     将指定的菜单项添加到此菜单。 
  void add(String label) 
     将带有指定标签的项添加到此菜单。
     
 4.MenuComponent ---> MenuItem类
  1)菜单中的所有项必须属于类 MenuItem 或其子类之一。 
  默认的 MenuItem 对象包含一个简单的加标签的菜单项。
  2)构造方法摘要 
  MenuItem() 
     构造具有空标签且没有键盘快捷方式的新菜单项。 
  MenuItem(String label) 
     构造具有指定的标签且没有键盘快捷方式的新菜单项。 
  MenuItem(String label, MenuShortcut s) 
     创建具有关联的键盘快捷方式的菜单项。 
  3)方法摘要 
  void addActionListener(ActionListener l) 
     添加指定的动作侦听器,以从此菜单项接收动作事件。 


十一GUI(练习-打开文件)

 1.Component ---> Container ---> Window ---> Dialog ---> FileDialog类
  1)FileDialog 类显示一个对话框窗口,用户可以从中选择文件。 
  由于它是一个模式对话框,当应用程序调用其 show 方法来显示对话框时,
  它将阻塞其余应用程序,直到用户选择一个文件。
  2)字段摘要 
  static int LOAD 
     此常量值指示文件对话框窗口的作用是查找要读取的文件。 
  static int SAVE 
     此常量值指示文件对话框窗口的作用是查找要写入的文件。 
  3)构造方法摘要 
  FileDialog(Dialog parent) 
     创建一个文件对话框,用于加载文件。 
  FileDialog(Dialog parent, String title) 
     创建一个具有指定标题的文件对话框,用于加载文件。 
  FileDialog(Dialog parent, String title, int mode) 
     创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。 
  FileDialog(Frame parent) 
     创建一个文件对话框,用于加载文件。 
  FileDialog(Frame parent, String title) 
     创建一个具有指定标题的文件对话框窗口,用于加载文件。 
  FileDialog(Frame parent, String title, int mode) 
     创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。 
  4)方法摘要 
  String getDirectory() 
     获取此文件对话框的目录。 
  String getFile() 
     获取此文件对话框的选定文件。 
  void setDirectory(String dir) 
     将此文件对话框窗口的目录设置为指定目录。 
  void setFile(String file) 
     将此文件对话框窗口的选定文件设置为指定文件。 
  int getMode() 
     指示此文件对话框是用于从文件加载内容还是将内容保存到文件。 
  void setMode(int mode) 
     设置文件对话框的模式。

十二.GUI(jar包双击执行)

1)加包:package mymenu;

 F:\lx\heima\practice\22>javac -d f:\lx\myclass MyMenuTest.java
2)打jar包
 F:\>cd lx\myclass
 F:\lx\myclass>jar -cvf my.jar mymenu
 --->生成jar包 my.jar
3)双击my.jar报提示:Failed to load Main-Class manifest attribute from
      F:lx\myclass\my.jar
      (加载Main_Class 清单字段属性失败:未指定jar包双击执行主函数类)
4)将主函数类告诉jar包。
 用WinRAR打开my.jar,找到并打开配置文件:MANIFEST.MF
 配置文件中只有版本信息,要将先执行主函数的信息添加进来。删除my.jar.
5)新建配置文档1.txt(名称不限),输入内容:Main-Class: mymenu.MyMenuTest
6)查看jar的使用:
 F:\lx\myclass>jar
 用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-p
 s ...
 选项包括:
    -c  创建新的归档文件
    -t  列出归档目录
    -x  解压缩已归档的指定(或所有)文件
    -u  更新现有的归档文件
    -v  在标准输出中生成详细输出
    -f  指定归档文件名
    -m  包含指定清单文件中的清单信息
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储;不使用任何 ZIP 压缩
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含其中的文件
 如果有任何目录文件,则对其进行递归处理。
 清单文件名、归档文件名和入口点名的指定顺序
 与 "m"、"f" 和 "e" 标志的指定顺序相同。
 示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
       jar cvf classes.jar Foo.class Bar.class
 示例 2:使用现有的清单文件 "mymanifest" 并
           将 foo/ 目录中的所有文件归档到 "classes.jar" 中:
       jar cvfm classes.jar mymanifest -C foo/ .
7)编译配置文件:
 F:\lx\myclass>jar -cvfm my.jar 1.txt mymenu
8)jar文件必须在本地注册过才能用,怎么样注册呢?
 (Windows XP中)工具-->文件夹选项--->文件类型--->新建(扩展名:jar)---> 选择jar--->点"高级"
 --->更改图标--->新建--->新操作:open--->(用浏览打开)用于执行操作的应用程序:"D:\Program Files\rjkf\Java\jdk1.6.0_13\bin\javaw.exe" -jar(后加-jar参数) 
 --->确定

 注意:配置文件Main-Class: mymenu.MyMenuTest中mymenu前要加个空格,否则会抛出IOException,说明
 该文件在被IO流所读取。结尾要用回车结束,否则数据就加不进去。
 JDK是双击安装版的话,则会已经完成注册,若只是将JDK的目录拷贝到电脑上用的话,刚需要重新手动配置注  册。




原创粉丝点击