GUI

来源:互联网 发布:android软件开发 编辑:程序博客网 时间:2024/04/20 13:37



  • GUI概述

    • GUI:Graphical User Interface(图形用户接口)。
      • 用图形的方式,来显示计算机操作的界面,这样更方便更直观。
    • CLI:Command line User Interface (命令行用户接口)。
      • 就是常见的Dos命令行操作。
      • 需要记忆一些常用的命令,操作不直观。
    • Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
    • java.Awt:Abstract Window ToolKit (抽象窗口工具包)
      • 需要调用本地系统方法实现功能。属重量级控件。
    • javax.Swing:
      • 在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全 由Java实现。增强了移植性,属轻量级控件。、
    • 继承关系图:

    • Container:为容器,是一个特殊的组件,该组件中可以通过add 方法添加其他组件进来。

  • 布局管理器

    • 布局

      • 容器中的组件的排放方式,就是布局。

    • 常见的布局管理器

      • FlowLayout(流式布局管理器):
        • 从左到右的顺序排列。
        • Panel默认的布局管理器。
      • BorderLayout(边界布局管理器):
        • 东,南,西,北,中。
        • 如果不指定方向,则居中填充,多个组件的话填充覆盖。
        • Frame\Dialog默认的布局管理器。
      • GridLayout(网格布局管理器):
        • 规则的矩阵。
      • CardLayout(卡片布局管理器):
        • 选项卡。
      • GridBagLayout(网格包布局管理器):
        • 非规则的矩阵。
      • 坐标式布局管理器:
        • 组件可以放在任意位置。

  • Frame

    • 图形化界面是由主线程以外的另一个线程运行的。主线程要等所有其他前台线程都结束以后才能结束。
    • 创建图形化界面:
      1. 创建Frame窗体。
      2. 对窗体进行基本设置(大小、位置、布局等)。
      3. 定义组件。
      4. 将组件通过窗体的add方法添加到窗体中。
      5. 让窗体显示,通过setVisible(true)。
    • 代码举例:
      package cn.itcast.heima;import java.awt.*;class AwtDemo {public static void main(String[] args) {Frame f = new Frame("my wat");f.setSize(200,150);f.setLocation(300,200);f.setLayout(new FlowLayout());//设置为流式布局Button b = new Button("按钮");f.add(b);f.setVisible(true);}}
      程序执行效果:弹出窗体如图

  • 事件监听机制

    • 事件监听机制流程图


    • 事件监听机制组成

      1. 事件源(组件)
        • awt包或者swing包中的那些图形界面组件。
      2. 事件(Event)
        • 每一个事件源都有自己特有的对应事件和共性事件。
      3. 监听器(Listener)
        • 封装了可以触发某一个事件的动作(不止一个)。
      4. 事件处理(引发事件后处理方式)

    • 事件监听机制的实现步骤:

      • 确定事件源(容器或组件)。
      • 通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
      • 该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。一般用匿名内部类来表示。
      • 在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
      • 事件触发后会把事件打包成对象传递给该变量。(其中包括 事件源对象。通过getSource()或者,getComponent()获取。)

    • 窗体事件

      • 代码举例:
        //通过关闭按钮关闭窗体。package cn.itcast.heima;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;class AwtDemo {public static void main(String[] args) {Frame f = new Frame("my wat");f.setSize(200,150);f.setLocation(300,200);f.setLayout(new FlowLayout());Button b = new Button("按钮");f.add(b);//添加窗体事件监听f.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});f.setVisible(true);}}
        程序执行效果:点击关闭按钮,窗口关闭。

    • Action事件

      • 代码举例:
        //为按钮添加活动监听package cn.itcast.heima;import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;class AwtDemo {private Frame f;private Button b;public AwtDemo(){ini();}void ini(){f = new Frame("my wat");f.setSize(200,150);f.setLocation(300,200);f.setLayout(new FlowLayout());b = new Button("按钮");f.add(b);myEvent();f.setVisible(true);}private void myEvent(){//添加Action监听b.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});}public static void main(String[] args) {new AwtDemo();}}
        程序执行效果:点击按钮b,窗口关闭。

    • 鼠标事件

      • 代码举例:
        //判断鼠标双击动作package cn.itcast.heima;import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;class AwtDemo {private Frame f;private Button b;public AwtDemo(){ini();}void ini(){f = new Frame("my wat");f.setSize(200,150);f.setLocation(300,200);f.setLayout(new FlowLayout());b = new Button("按钮");f.add(b);myEvent();f.setVisible(true);}private void myEvent(){//鼠标事件监听b.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {if (e.getClickCount() == 2) {System.exit(0);}}});}public static void main(String[] args) {new AwtDemo();}}
        程序执行效果:双击按钮b,窗口关闭。

    • 键盘事件

      • 代码举例:
        //判断键盘动作,如果在按钮b上按下Ctrl+Enter,关闭窗口//判断文本输入框中的键盘录入,如果不是数字,不能输入package cn.itcast.heima;import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.TextField;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;class AwtDemo {private Frame f;private Button b;private TextField tf;public AwtDemo(){ini();}void ini(){f = new Frame("my wat");f.setSize(200,150);f.setLocation(300,200);f.setLayout(new FlowLayout());tf = new TextField(20);b = new Button("按钮");f.add(tf);f.add(b);myEvent();f.setVisible(true);}private void myEvent(){//按钮b的键盘事件监听b.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {int code = e.getKeyCode();if (code == KeyEvent.VK_ENTER && e.isControlDown()) {System.exit(0);}}});//文本输入框的键盘事件监听tf.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {int code = e.getKeyCode();if (code < KeyEvent.VK_0 || code > KeyEvent.VK_9) {e.consume();}}});}public static void main(String[] args) {new AwtDemo();}}
        程序执行效果:文本框只能显示键盘录入的数字。按钮b获得焦点后,按下Ctrl+Enter,窗口关闭。

  • 菜单

    • 菜单继承体系


    • 菜单操作

      • MenuItem:菜单项,表示最后一级菜单,没有子菜单或子菜单项。
      • Menu:菜单,可以对其继续添加子菜单或子菜单项。
      • MenuBar类的add(Menu m)方法可以向菜单栏中添加菜单。
      • Menu类的add(MenuItem mi)方法可以向菜单中添加菜单项。由于Menu是MenuItem的子类,因此该方法也可以向菜单中添加菜单。
      • MenuItem类的addActionListener(ActionListener l)方法可以添加动作监听。



原创粉丝点击