---------- 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演示示例

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

五、事件监听机制

  (一)事件监听机制组成

  (1)事件源(组件)。

  (2)事件(Event)。

  (3)监听器(Listener)。

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

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

   

  (三)事件处理的步骤

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

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

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

  说明:

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

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

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

  (四)应用示例

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

 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;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MouseAndKeyDemo {
private Frame f;
private TextField tf;
private Button but;
//构造函数,用来初始化
public MouseAndKeyDemo() {
init();
}
//窗体创建与功能实现
private void init() {
f = new Frame("鼠标和键盘监听演示");
f.setBounds(400, 200, 500, 400);
f.setLayout(new FlowLayout()); tf = new TextField(35);
but = new Button("一个按钮"); f.add(tf);
f.add(but); myEvent(); f.setVisible(true);
}
//注册事件
private void myEvent() {
// 给文本框添加键盘监听。
tf.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {
System.out.println("enter run ...");
}
}
}); f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}); // 在按钮上添加一个鼠标监听.
but.addMouseListener(new MouseAdapter() {
private int count = 1;
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2)
tf.setText("mouse double click..." + count++);
}
});
}
public static void main(String[] args) {
new MouseAndKeyDemo();
}
}

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

 /* 列出指定目录下的内容,当输入的路径不正确时,给出错误提示信息。 */
import java.io.*;
import java.awt.*;
import java.awt.event.*;
class MyWindowDemo {
// 定义所需组件引用
private Frame f;
private Button but, bok;
private TextField tf;
private TextArea ta;
private Dialog d;
private Label lab; // 构造函数
MyWindowDemo() {
init();
} // 窗体基本设置于功能实现
public void init() {
// 组件实例化
f = new Frame("我的Window");
but = new Button("跳转");
tf = new TextField();
ta = new TextArea(, ); // 基本设置
f.setBounds(, , , );
f.setLayout(new FlowLayout()); // 添加组件
f.add(tf);
f.add(but);
f.add(ta); // 窗体事件
myEvent(); // 窗体显示
f.setVisible(true);
} // 注册事件
public void myEvent() {
// 窗体关闭功能
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit();
}
}); // “跳转”按钮事件
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showFile();// 列出目录内容在文本区中
}
}); // 文本框键盘事件
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
// 如果键盘按下Enter键,就将目录内容显示在文本区中
if (e.getKeyCode() == KeyEvent.VK_ENTER)
showFile();
}
});
} // 目录内容显示在文本区中方法
private void showFile() {
String path = tf.getText();// 获取输入的路径
File dir = new File(path);// 将路径封装成对象
// 判断输入的路径是否存在,且是否是文件夹
if (dir.exists() && dir.isDirectory()) {
ta.setText("");// 清空文本区中的内容 String names[] = dir.list();// 列出目录下的内容 for (String name : names) {
ta.append(name + "\r\n");// 添加进文本区中
}
} else {
// 对话框基本设置
d = new Dialog(f, "错误提示", true);
d.setBounds(, , , );
d.setLayout(new FlowLayout()); bok = new Button("确定");
lab = new Label(); // 添加按钮和文本
d.add(bok);
d.add(lab); // 对话框关闭事件
d.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
d.setVisible(false);// 退出对话框
}
}); // “确定”按钮事件
bok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
d.setVisible(false);// 按确认键,退出对话框
}
}); String info = "您输入的路径:" + path + "是错误的,请重输!"; lab.setText(info);// 设置标签文本内容
d.setVisible(true);// 显示对话框
}
} public static void main(String[] args) {
// 运行窗体
new MyWindowDemo();
}
}

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

黑马程序员——【Java基础】——GUI(图形用户界面)的更多相关文章

  1. 黑马程序员——JAVA基础之GUI

    -----Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- GUI(图形用户界面)  GUI •  Graphical User Interface(图形用 ...

  2. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...

  3. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  4. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

  5. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  6. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

  7. 黑马程序员——JAVA基础之语法、命名规则

    ------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...

  8. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  9. 黑马程序员——JAVA基础之多线程的安全问题

    ------- android培训.java培训.期待与您交流! ---------- 导致多线程出现问题的一个特殊的状态:就绪.具备了执行资格,但是还没有获取资源. 导致安全问题的出现的原因: 1. ...

  10. 黑马程序员——JAVA基础之简述设计模式

    ------- android培训.java培训.期待与您交流! ---------- 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓 ...

随机推荐

  1. netbeans中给jpanl添加背景图片制定代码的理解——匿名内部类继承父类

    此测试是为了仿照在netbeans中给jpanl添加背景图片的制定代码的执行过程 在JpDemo中定义了个Car类的数据类型,但在给其赋值对象时使用了匿名内部类,继承了Car类,是其子类,并重写了父类 ...

  2. 覆盖的面积(HDU 1255 线段树)

    覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem D ...

  3. 如何从github上面拷贝源码

    有好奇心的朋友们一定都想看一看很多开源项目的源码,那么github就不用说啦,太多的开源项目都把源码放到上面. 博主最近为了学习angularjs也不得不去github上面弄源码,下面将会介绍如何做: ...

  4. noi 8787 数的划分

    题目链接:http://noi.openjudge.cn/ch0206/8787/ 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 简直跟分苹果一模一样. #include < ...

  5. 第四章 函数(JavaScript:语言精粹)

    函数包含一组语句,用来指定对象的行为,其代码可以用来重复使用.   一般来说,编程就是将一组需求分解成一组函数和数据结构的技能.   概览:函数对象 | 函数字面量 | 调用 | 方法调用模式 | 函 ...

  6. centos中安装mysql数据库

    1.查看是否已有mysql数据库: #rpm -qa |grep mysql 命令返回空,说明没有安装成功. 2.安装mysql yum install mysql* 安装完成后,却发现只安装了JDB ...

  7. BI Content、Metadata Repository

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. 《K&R》中引用的几个排序算法(shellsort、)以及一个自己乱写的排序

    留待期末考后更新... void shellsort(int v[], int n) { int gap, i, j, temp; ; gap > ; gap /= ) for(i = gap; ...

  9. Oracle 优化 - CPU 问题

    作为 OLTP 应用,一般不太有 CPU 问题,比较少 - 毕竟大多数问题都是 IO 引起:但是偶尔也会有. 问题判断 很简单 - OS 出现 CPU 很高的问题,持续高于 90% 应用可能会表现慢 ...

  10. nginx 缓存机制

    nginx 缓存机制   Nginx缓存的基本思路 利用请求的局部性原理,将请求过的内容在本地建立一个副本,下次访问时不再连接到后端服务器,直接响应本地内容 Nginx服务器启动后,会对本地磁盘上的缓 ...