Java语言中的GUI总结

一、GUI

  1、GUI的概念

    GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好。

  2、AWT、Swing以及SWT

    AWT(Abstract Windows Toolkit)是Java语言中最原始的GUI工具包,相关API位于java.awt包中。AWT是一个非常有限的GUI工具包,比如树、表格等都不支持;

    然而AWT却无法实现。AWT运行时,每个组件都要依赖于当前平台的GUI对等体(peer)控件,因此,AWT GUI 的外观和行为就会依赖当前平台。

  3、java.awt包

    java.awt包是Java内置的包,属于Java基础类库(JFC)的一部分,其中包括以下内容;

    便于用户输入的一组丰富的界面组件;

    将组件放置在适当位置的几种布局管理器;

    事件处理模型;

    图形和图像工具等等。

  4、常用的基本Swing组件

    在Swing编程中,有一些经常要使用到的组件,其中包括:

    JFrame(窗体,框架)、JPanel(面板,容器)、JButton(按钮)、JLabel(标签)、JTextField(文本框)、JTextArea(文本域)。

  5、创建GUI的步骤总结

    分析GUI中需要使用的组件;

    将GUI分成几个部分,每个部分使用JPanel布局。每个JPanel可以根据情况使用不同的布局管理器;

    将多个JPanel布局到一个JFrame上。

二、Swing事件监听快速入门

  1、事件处理

    对于采用了图形用户界面的程序来说,事件控制是非常重要的;

    到目前为止,我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能,要实现相应的功能,必须进行事件处理;

    用户与GUI组件进行交互就会发生事件,如:按下一个按钮、用键盘输入一个字符、点击鼠标等等;

    当前我们要关注的并不是“事件是如何产生的”,而是讨论当发生事件后,我们应当“如何处理之”。

  2、事件处理模型

    Java中,事件处理的基本思路如下:

    一个源(事件源)产生一个事件(事件对象)并把它送到监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件;

    一个事件源必须注册监听器以便监听器可以接受关于一个特定事件的通知。

  3、事件源与事件

    当在一个图形用户界面点击鼠标或者按下键盘时,都是针对于具体组件而发生的动作,如:使用鼠标点击某个按钮;按下键盘向文本框输入内容等等;

    我们把动作所操纵的对象称为事件源,请注意:事件源一定是指某个组件;

    当针对于事件源发生动作时,就会产生一个事件。

  4、监听器与监听器接口

    针对每一类型的事件,都有与之相对应的监听器,用于监听事件的发生;

    在Java中,监听器由一系列接口来提供;

    实际上,事件监听器就是实现了事件监听接口的类,监听器不断监听事件源的动作,当事件源产生一个事件后,监听器接收到事件源的通知,就调用特定的方法,以执行指定的动作;

    特定的事件监听器只对特定的事件感兴趣。

  5、事件类型

    实际上,事件是区分类型的,如:操作鼠标时会产生鼠标事件,使用键盘输入字符时会产生键盘事件,窗体打开或关闭时会产生窗体事件等等;

    对于不同类型的事件会有不同类型的监听器与之对应;

    java.awt.event包中包含了一系列监听器接口,分别用来处理不同类型的事件。

  6、事件对象

    Java中的所有事件都被封装在事件对象中,所有事件对象皆派生自EventObject类;

    对于不同的事件类型会有不同的事件对象,它们都以类似于XxxEvent的方式命名,如:ActionEvent、MouseEvent等等;

    事件对象中包含有事件发生时的相关信息(即事件触发时产生的一些数据),会被事件底层机制传递到事件处理函数中;

    实际上事件对象就是事件处理函数中被传递进来的参数,如果在处理事件的过程中需要使用到相关的某些数据,可以从事件对象中获取。

三、内部类

  1、定义.

    内部类是Java独有的一种语法结构,即在一个类的内部定义另一个类,如:

    public class ExteriorClass {

       private class InteriorClass {   

      }

     }

    此时,内部类InteriorClass就成为外部类ExteriorClass中的成员,访问权限遵循类成员的访问权限机制,可以是public、protected、缺省和private;

    内部类可以很方便地访问外部类中的其它成员;

    内部类主要为了解决类成员间相互访问的问题。

四、匿名内部类

  匿名类其实就是一种比较特殊的内部类,只是这个类没有名字而已;

  匿名类与内部类相似,能够访问到外部类中的所有成员;

  很多情况下(特别是在事件处理中),匿名类一般被定义在外部类的某个方法中,所以也被称为局部内部类,对于局部内部类,它还可以访问到这个方法的参数;

  在适当的情况下,使用匿名类来实现事件处理,会使代码更简洁,更灵活;

  只能使用一次。

五、GUI中的并发任务

  在GUI中,常常可能需要处理并发任务,例如,聊天室应该可以支持传递文件的功能,而传递文件的同时可以继续聊天;

  修改 清空聊天记录 事件处理,使其死循环,模拟需要很长时间,可见清理过程中,不能做其他操作;

  使用多线程编程,将解决该问题,后续学习。

时间: 2024-10-21 12:43:46

Java语言中的GUI总结的相关文章

Java语言中String累的总结

String类 1.Java.lang包简介 java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类: 在默认情况下,每个java程序都会自动导入该包,因此无需在程序中显式地声明. 2.String类 Java语言中,字符串是String类的对象: Java语言中,String是引用数据类型: 可以通过使用String类提供的方法来完成对字符串的操作: 创建一个字符串对象之后,将不能更改构成字符串的字符: 每当更改了字符串版本时,就创建了一个新的字符串对象,并在其内

java语言中的varargs

java语言中的varargs允许调用者传递数量不定的参数,并传入的数量不定的实参转化为数组形式的形参. 那么不传递任何参数,或者传入null时,形参的值是什么呢?下面是测试代码和运行结果: 1 private void test1(int... args) { 2 if (args != null) { 3 System.out.println("[test1] args.length = " + args.length); 4 } else { 5 System.out.print

javascript中模拟实现java语言中的map

//javascript中模拟实现java语言中的map 实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script type="text/javascript"> //private var obj={};//空的对象容器,用于承装键值对 function Map() { //put方法 th

Java语言中extend和implement的区别

Java语言并不支持多重继承,而只能继承一个类,不过我们可以使用implements来实现多个接口. extends继承的父类:不能声明为final或者定义为abstract: implements实现接口interface,用逗号分开就好: 如:class A extends B implements C, D, E interface的引入是为了部分地提供多继承的功能. 在interface中只需声明方法头,而将方法体留给实现的class来做. 这些实现的class的实例完全可以当作inte

Java语言中Object对象的hashCode()取值的底层算法是怎样实现的?

Java语言中,Object对象有个特殊的方法:hashcode(), hashcode()表示的是JVM虚拟机为这个Object对象分配的一个int类型的数值,JVM会使用对象的hashcode值来提高对HashMap.Hashtable哈希表存取对象的使用效率. 关于Object对象的hashCode()返回值,网上对它就是一个简单的描述:"JVM根据某种策略生成的",那么这种策略到底是什么呢?我有一个毛病,遇到这种含糊其辞的东西,就想探个究竟,所以,本文就将hashCode()本

浅谈Java语言中try{}catch{}和finally{}的执行顺序问题

浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06  PM  13:41:46  1. 不管有没有出现异常,finally块中代码都会执行: 2. 当try和catch中有return时,finally仍然会执行: 3. finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的:

Java语言中:float、double数据类型在内存中是如何存储的

引用参考 https://www.cnblogs.com/chenmingjun/p/8415464.html#4291528 https://blog.csdn.net/yansmile1/article/details/70145416 java语言中,float类型数字在计算机中用4个字节(32位)来存储.double类型占用8个字节(64位). 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储

Java语言中的Class类

基本概念 在Object类中定义了以下的方法,此方法将被所有子类继承 public final Class getClass() 这个方法的返回值类型是一个Class类,此类是Java反射的源头,是实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称. 对象照镜子后可以得到的信息:某个类的属性.方法和构造器.某个类到底实现了哪些接口.对于每个类而言,JRE都为其保留一个不变的Class类型的对象.一个Class对象包含了特定某个结构(class.interface.en

Java 语言中 Enum 类型的使用介绍

Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似.不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围. 举个例子来说明一下,如果希望为彩虹描绘出七种颜色,你可以在 Java 程序中通过常量定义方式来实现. 清单 1. 常量定义 Public static class RainbowColor { // 红橙黄绿青蓝紫七种颜