1、Swing组件快速入门java
GUI的概念编程
①到目前为止,咱们编写的都是基于控制台的程序;多线程
②GUI(Graphical User Interface)即图形用户界面,它可以使应用程序看上去更加友好;并发
③在企业中使用Java作GUI应用,相对较少;框架
Swing中的组件函数
①Swing中的大部分组件类位于javax.swing包中;布局
②组件是JComponent的子类学习
③Swing中的组件很是丰富,支持不少功能强大的组件,如JTable、JTreespa
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中,经常可能须要处理并发任务,例如,聊天室应该能够支持传递文件的功能,而传递文件的同时能够继续聊天
修改 清空聊天记录 事件处理,使其死循环,模拟须要很长时间,可见清理过程当中,不能作其余操做
使用多线程编程,将解决该问题,后续学习