zoukankan      html  css  js  c++  java
  • 黑马程序员——【Java基础】——GUI(图形用户界面)

    ---------- android培训java培训、期待与您交流! ---------- 

    一、概述

      1、GUI(GraphicalUser Interface):又称图形用户界面,是计算机用户与计算机交互的一种方式。

      2、用户与计算机交互的方式有两种:GUI和CLI。

      (1)GUI(Graphical User Interface):图形用户接口,用图形方式,来显示计算机操作界面,方便直观。

      (2)CLI(Command LineUser Interface):命令行用户接口,即常见的Dos命令行操作,须记住一些命令,操作不直观。

      3、Java提供的GUI对象都存在于java.Awt和javax.Swing两个包中,其中:

      (1)java.Awt(Abstract Window Toolkit):即抽象窗口工具包,调用本地系统方法实现功能,属重量级控件。

      (2)javax.Swing包:在AWT的基础上建立的一套图形界面系统,有更多的组件,且完全由java实现,属轻量级控件。

    二、继承关系图

      

      注:Container是容器型组件,该组件中可以通过add方法添加其他组件。Container常用子类:Window、Panel(不能单独存在)。

    三、布局管理器

      1、布局:容器中的组件排列方式。

      2、常见的布局管理器:

        ● FlowLayout(流式布局管理器)

            |---从左向右排列,Panel默认排列方式。

        ● BorderLayout(边界式布局管理器)

            |---东南西北中的排列方式,是Frame的默认布局管理。

        ● GridLayout(网格式布局管理器)

            |---规则的矩阵。

        ● CardLayout(卡片式布局管)

            |---即选项卡。

        ● GridBayLayout:(网格包布局管理器)

            |---非规则矩阵

    四、Frame演示

      (一)Frame创建步骤

      1、创建Frame窗体:

      Frame f = new Frame("my Frame");//可设置标题,即窗体名字

      2、对窗体进行基本设置:如大小,位置,布局等:

      f.setSize(int wight,int hight);//窗体大小设置

      f.setLocation(int x,int y);//窗体显示位置设置,横纵坐标

      f.setBounds(int x,int y,int wight,int hight),也可以直接用这个方法对大小和位置设置

      f.setLayout(Layout layout),参数为指定的布局管理器,如FlowLayout

      3、定义组件:

      Button b = new Button(“my Button”);//可设置组件的名称

      4、将组件通过add方法添加到窗体中:

      f.add(b);//将按钮组件添加进窗体

      5、让窗体显示:

      f.setVisible(boolean b);//通过设置参数是true还是false是否显示窗体

      (二)Frame演示示例

     1 class FrameDemo{
     2     public static void main(String[] args){
     3         Frame f = new Frame("my frame");
     4 //        f.setSize(500, 400);    
     5 //        f.setLocation(400, 200);
     6         f.setBounds(400, 200, 500, 400);
     7         f.setLayout(new FlowLayout());//设置流式布局
     8         Button but  = new Button("一个按钮");
     9         f.add(but);//将按钮添加到窗体中。
    10         f.setVisible(true);
    11     }
    12 }

    五、事件监听机制

      (一)事件监听机制组成

      (1)事件源(组件)。

      (2)事件(Event)。

      (3)监听器(Listener)。

      (4)事件处理(引发事件后的处理方式)。

      (二)事件监听机制流程图

       

      (三)事件处理的步骤

      (1)确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器(Listener)注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

      (2)一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

    1 Frame f= new Frame("演示鼠标和键盘监听");
    2 f.addWindowlistener(new WindowAdapter()
    3 {
    4 @Override
    5      public void windowClosing(WindowEvent e)
    6      {
    7           System.exit(0);//表示关闭窗口
    8      }
    9 });

      说明:

      (1)事件触发后会将事件打包成对象传递给覆写方法中参数的变量。(其中包括事件源对象,通过getSource()或者getComponent()获取。)

      (2)若用子类实现WindowListener接口,就需要覆盖其中的7个方法,可只用到其中的关闭动作,其他动作未用到,但却必须重写全部。因为WindowLister的子类WindowAdapter(适配器)已经实现此接口,并覆盖了其中所有方法。那么只需继承WindowAdapter,覆盖需要的方法即可。

      (3)明确事件,并对事件进行处理,其实,添加什么监听器就需要添加什么事件。

      (四)应用示例

      1、/* 键盘事件和鼠标事件 */

     1 import java.awt.Button;
     2 import java.awt.FlowLayout;
     3 import java.awt.Frame;
     4 import java.awt.TextField;
     5 import java.awt.event.KeyAdapter;
     6 import java.awt.event.KeyEvent;
     7 import java.awt.event.MouseAdapter;
     8 import java.awt.event.MouseEvent;
     9 import java.awt.event.WindowAdapter;
    10 import java.awt.event.WindowEvent;
    11 public class MouseAndKeyDemo {
    12     private Frame f;
    13     private TextField tf;
    14     private Button but;
    15 //构造函数,用来初始化
    16     public MouseAndKeyDemo() {
    17         init();
    18     }
    19     //窗体创建与功能实现
    20     private void init() {
    21         f = new Frame("鼠标和键盘监听演示");
    22         f.setBounds(400, 200, 500, 400);
    23         f.setLayout(new FlowLayout());
    24 
    25         tf = new TextField(35);
    26         but = new Button("一个按钮");
    27 
    28         f.add(tf);
    29         f.add(but);
    30 
    31         myEvent();
    32 
    33         f.setVisible(true);
    34     }
    35     //注册事件
    36     private void myEvent() {
    37         // 给文本框添加键盘监听。
    38         tf.addKeyListener(new KeyAdapter() {
    39             @Override
    40             public void keyPressed(KeyEvent e) {
    41                 if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {
    42                     System.out.println("enter run ...");
    43                 }
    44             }
    45         });
    46 
    47         f.addWindowListener(new WindowAdapter() {
    48             @Override
    49             public void windowClosing(WindowEvent e) {
    50                 System.exit(0);
    51             }
    52         });
    53 
    54         // 在按钮上添加一个鼠标监听.
    55         but.addMouseListener(new MouseAdapter() {
    56             private int count = 1;
    57             @Override
    58             public void mouseClicked(MouseEvent e) {
    59                 if (e.getClickCount() == 2)
    60                     tf.setText("mouse double click..." + count++);
    61             }
    62         });
    63     }
    64     public static void main(String[] args) {
    65         new MouseAndKeyDemo();
    66     }
    67 }

       2、列出指定目录下的内容,当输入的路径不正确时,给出错误提示信息。 

      1 /* 列出指定目录下的内容,当输入的路径不正确时,给出错误提示信息。 */
      2 import java.io.*;
      3 import java.awt.*;
      4 import java.awt.event.*;
      5 class MyWindowDemo {
      6     // 定义所需组件引用
      7     private Frame f;
      8     private Button but, bok;
      9     private TextField tf;
     10     private TextArea ta;
     11     private Dialog d;
     12     private Label lab;
     13 
     14     // 构造函数
     15     MyWindowDemo() {
     16         init();
     17     }
     18 
     19     // 窗体基本设置于功能实现
     20     public void init() {
     21         // 组件实例化
     22         f = new Frame("我的Window");
     23         but = new Button("跳转");
     24         tf = new TextField(58);
     25         ta = new TextArea(27, 65);
     26 
     27         // 基本设置
     28         f.setBounds(300, 150, 500, 500);
     29         f.setLayout(new FlowLayout());
     30 
     31         // 添加组件
     32         f.add(tf);
     33         f.add(but);
     34         f.add(ta);
     35 
     36         // 窗体事件
     37         myEvent();
     38 
     39         // 窗体显示
     40         f.setVisible(true);
     41     }
     42 
     43     // 注册事件
     44     public void myEvent() {
     45         // 窗体关闭功能
     46         f.addWindowListener(new WindowAdapter() {
     47             public void windowClosing(WindowEvent e) {
     48                 System.exit(0);
     49             }
     50         });
     51 
     52         // “跳转”按钮事件
     53         but.addActionListener(new ActionListener() {
     54             public void actionPerformed(ActionEvent e) {
     55                 showFile();// 列出目录内容在文本区中
     56             }
     57         });
     58 
     59         // 文本框键盘事件
     60         tf.addKeyListener(new KeyAdapter() {
     61             public void keyPressed(KeyEvent e) {
     62                 // 如果键盘按下Enter键,就将目录内容显示在文本区中
     63                 if (e.getKeyCode() == KeyEvent.VK_ENTER)
     64                     showFile();
     65             }
     66         });
     67     }
     68 
     69     // 目录内容显示在文本区中方法
     70     private void showFile() {
     71         String path = tf.getText();// 获取输入的路径
     72         File dir = new File(path);// 将路径封装成对象
     73         // 判断输入的路径是否存在,且是否是文件夹
     74         if (dir.exists() && dir.isDirectory()) {
     75             ta.setText("");// 清空文本区中的内容
     76 
     77             String names[] = dir.list();// 列出目录下的内容
     78             
     79             for (String name : names) {
     80                 ta.append(name + "
    ");// 添加进文本区中
     81             }
     82         } else {
     83             // 对话框基本设置
     84             d = new Dialog(f, "错误提示", true);
     85             d.setBounds(400, 200, 280, 150);
     86             d.setLayout(new FlowLayout());
     87 
     88             bok = new Button("确定");
     89             lab = new Label();
     90 
     91             // 添加按钮和文本
     92             d.add(bok);
     93             d.add(lab);
     94 
     95             // 对话框关闭事件
     96             d.addWindowListener(new WindowAdapter() {
     97                 public void windowClosing(WindowEvent e) {
     98                     d.setVisible(false);// 退出对话框
     99                 }
    100             });
    101 
    102             // “确定”按钮事件
    103             bok.addActionListener(new ActionListener() {
    104                 public void actionPerformed(ActionEvent e) {
    105                     d.setVisible(false);// 按确认键,退出对话框
    106                 }
    107             });
    108 
    109             String info = "您输入的路径:" + path + "是错误的,请重输!";
    110 
    111             lab.setText(info);// 设置标签文本内容
    112             d.setVisible(true);// 显示对话框
    113         }
    114     }
    115 
    116     public static void main(String[] args) {
    117         // 运行窗体
    118         new MyWindowDemo();
    119     }
    120 }

    ---------- android培训java培训、期待与您交流! ----------

  • 相关阅读:
    Windows安装和使用zookeeper
    Maven安装以及环境配置(Windows)
    greenplum下载地址
    Install Greenplum OSS on Ubuntu
    MySQL主从复制与主主复制
    HADOOP+SPARK+ZOOKEEPER+HBASE+HIVE集群搭建(转)
    kafka实战
    rtl8723 2个 wlan
    wpa supplicant 移植
    wireless tool 移植
  • 原文地址:https://www.cnblogs.com/jianxingjianyuan2014/p/4006108.html
Copyright © 2011-2022 走看看