Gui小计

一、Swing组件快速入门

GUI的概念

①到目前为止,我们编写的都是基于控制台的程序;

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

③在企业中使用Java做GUI应用,相对较少;

 

Swing中的组件

①Swing中的大部分组件类位于javax.swing包中;

②组件是JComponent的子类

③Swing中的组件非常丰富,支持很多功能强大的组件,如JTable、JTree

Swing组件的类体系结构

 

常用的基本Swing组件

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

1.JFrame(窗体,框架)

2.JPanel(面板,容器)

3.JButton(按钮)

4.JLabel(标签)

5.JTextField(文本框)

6.JTextArea(文本域)

javax.swing.JFrame

JFrame组件用于在Swing程序中创建窗体;

JFrame类的构造方法有4种重载方式,以下是常用的几种;

 

 

JPanel的常用方法

JPanel(面板)的操作方式与Container(内容面板)很相似,以下是一些常用方法

 

Container类通常用于操作JFrame的内容面板,其常用的方法有

 

Swing程序中,按钮可能是使用量最大的组件之一,JButton则是用来创建按钮的

Swing程序中,按钮可能是使用量最大的组件之一,JButton则是用来创建按钮的

 

 

 

 

 

 

JTextField是文本框组件,主要用来接受用户的输入;

JTextField类的构造方法有5种重载方式,以下是常用的几种

 

 

当用户有大量文本需要输入的时候,就可以使用到文本域组件,JTextArea的构造方法共有6种重载,以下是常用的几种

 

 

总结:

分析GUI中需要使用的组件

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

将多个JPanel布局到一个JFrame上

GUI事件监听器:

解释Java中的事件授权处理模型

了解java.awt.event包

了解Java中常用的事件类型

Swing编程中实现事件处理

事件处理:

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

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

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

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

事件处理模型:

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

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

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

事件源与事件:

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

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

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

监听器与监听器接口:

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

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

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

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

 

 

 

事件对象:

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

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

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

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

总结:

与事件处理相关的三个概念:事件源、监听器、事件对象;

在程序中要进行事件处理的话,需要导入java.awt.event包;

事件处理的三个步骤:

--确定事件源和监听器类型

--实现监听器接口

--将事件源注册到监听器

事件处理的三种语法实现形式:

--内部类的实现方式

--匿名类的实现方式

--直接实现的方式

内部类:

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

public class ExteriorClass {

    private class InteriorClass { }}

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

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

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

匿名内部类:

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

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

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

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

只能使用一次;

GUI中的并发任务:

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

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

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

 

posted @ 2017-10-10 19:39  alone-  阅读(155)  评论(0)    收藏  举报