黑马程序员——【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实现,属轻量级控件。

二、继承关系图

  黑马程序员——【Java基础】——GUI(图形用户界面)

  注: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)事件处理(引发事件后的处理方式)。

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

   黑马程序员——【Java基础】——GUI(图形用户界面)

  (三)事件处理的步骤

  (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 + "\r\n");// 添加进文本区中

 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培训、期待与您交流! ----------

你可能感兴趣的:(java基础)