------- android培训、java培训、期待与您交流! ----------
一、名词解释:
GUI
• Graphical User Interface(图形用户接口)。
•用图形的方式,来显示计算机操作的界面,这样更方便更直
观。
CLI
• Command line User Interface (命令行用户接口)
•就是常见的Dos命令行操作。
•需要记忆一些常用的命令,操作不直观。
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
Awt与 Swing
• java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
• javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
二、 GUI布局
容器中的组件的排放方式,就是布局。
布局管理器
常用的五种
• FlowLayout(流式布局管理器)
•从左到右的顺序排列。
• Panel默认的布局管理器。
• BorderLayout(边界布局管理器)
•东,南,西,北,中
• Frame默认的布局管理器。
• GridLayout(网格布局管理器)
•规则的矩阵
• CardLayout(卡片布局管理器)
•选项卡
• GridBagLayout(网格包布局管理器)
•非规则的矩阵
三。、Frame
创建图形化界面一般步骤:
1. 创建frame窗体。
2. 对窗体进行基本设置。比如大小位置布局。
a) setSize(x,y);setLocation(x,y);setLayout(Layout);setBounds(x,y,宽,高)
3. 定义组件。
4. 将组件通过窗体的add方法添加到窗体中。
5. 让窗体显示,通过setVisible(true).
四、事件监听机制
组成:
事件源(组件):就是awt或swing包中的那些图形界面组件。
事件(Event):每个事件源都有自己特有的对应事件和共性事件。
监听器(Listener):将可以出发一个事件的动作封装到了监听器中。
事件处理(引发事件后处理方式)
前三者,已经在java中直接定义好了,直接使用其对象就可以了。
我们要做的事情就是对产生的动作进行处理。
分析步骤:
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
1、窗体事件
给窗体添加监听器,用方法:
addWindowListener(windowListener);方法中传递的参数多用匿名内部类,举例如下:
import java.awt.*;
import java.awt.event.*;
class AwtDemo
{
public static void main(String[] args)
{
Frame f = new Frame("my awt");
f.setSize(500,400);
f.setLocation(300,200);
f.setLayout(new FlowLayout());
Button b = new Button("我是一个按钮");
f.add(b);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.out.println("我关");
System.exit(0);
}
public void windowActivated(WindowEvent e)
{
System.out.println("我活了。");
}
public void windowOpened(WindowEvent e)
{
System.out.println("我被打开了,hahahhahah");
}
});
f.setVisible(true);
}
}
在调用addWindowListener(WindowListener)方法时,传递的参数:
1. 窗体事件用WndowAdapter(实现了WindowListener接口,覆盖了其所有方法,但却都是空方法,所以就定义为抽象类避免创建无意义的实例)的子类,一般用匿名内部类方式来写。如上图。
2. Button的addActionListener(ActionListener)方法。ActionListener接口只有一个方法,所以直接用匿名内部类实现就可以了。形如: addActionListener(new ActionListener(){})
2.Action 事件
一般(不一定要这样)创建一个窗体类:
1. 先定义该图形中所需组件的引用。(没有在初始化函数中定义引用,是为了所有函数都能访问到)
2. 构造函数,将初始化函数init()写到其中。
3. 定义图形化界面初始化函数public void init(){}。在其中对组件进行初始化->将组件添加到frame中->加载监听窗体事件的方法(最好把该方法从图形化界面初始化中分离出来,即在初始化函数外单独写该方法)->显示窗体。
4. 写监听窗体事件的方法,包含了所有“添加事件/动作监听器的方法”,如有对窗体的操作则调用addWindowListener(WindowListener)方法;有对Button的操作,则调用Button的addActionListener(ActionListener l)。
5. 如果想要添加一个Button,则要用到Button特有的监听器,使用addActionListener(ActionListener l),该接口只有一个方法:actionPerformed(ActionEvert e) 由此可以总结:
a) 要想知道那个组件具备什么样的特有监听器,需要查看该组件对象的功能。
b) 如果某个组件的监听器(属于接口)中有多个方法(一般大于等于三个),为了方便使用,就会有一个对应的适配器(xxxadapter,实现了该接口所有方法的类),然后可以定义一个子类继承该适配器并只覆盖需要的功能方法,作为参数传递给添加监听器的方法。
c) 如果某个组件的监听器只有一两个方法,则一般不会有适配器,因为直接定义一个类实现其所有方法就可以了。(比如Button的ActionListener)
3. 鼠标事件
我们一般要导入两个包:
Import java.awt.*;图形用户界面的所有组件
Import java.awt.event.*; 所有组件的监听器和事件都在其中
鼠标事件和键盘事件,一般每个组件都有的,所以应该在Component中寻找该方法。
这里有一个问题需要注意:
如果对一个Button,同时定义了动作事件和鼠标的单机事件,当单机按钮是,会先执行鼠标单机事件再执行动作(Action)事件;但对于动作事件,鼠标单机有效果,键盘Enter也有效果,因此最好定义成Action,而不用鼠标单机事件。
鼠标事件对象可以调用自己的getClickCount()方法返回与此事件关联的鼠标单击次数。据此可以定义,鼠标双击,或更多击的响应动作。形式如:if(e.getClickCount==2){};
4. 键盘事件。
VK_?可以代表?键的数值,?是键的完整拼写形式,而且大写。
键盘事件的consume()方法,可以取消该次键盘事件。
练习-列出指定目录的内容
TextField(列数);只有一行,可以指定列数。
TextArea(行数,列数);文本框,可以指定行数和列数。
TextField和TextArea从父类继承的方法:
getText();
setText();
append(String);在文本框中追加文本。
五、菜单
可以通过Frame的setMenuBar()方法,添加菜单条;
可以通过MenuBar菜单条的add()方法添加Menu菜单;
可以通过Menu菜单的add方法添加Menu菜单或MenuItem菜单条目。(Menu是MenuItem的子类)
Menu菜单有向右三角箭头,MenuItem没有。
FileDialog里有获取指定文件信息的方法:
getDirectory();获取打开的文件的路径,不包含文件名。
getFile();获取文件名。
若打开对话框后点击了取消,则getFile的返回值为空。
如果点取消之前,也没有选择过任何文件,则getDirectory的返回值也为空。
Dialog的子类FileDialog类,显示一个用户可以从中选择文件的对话窗口。
构造方法之一:FileDialog(对话框所有者,对话框标题,mode),mode的值若为LOAD则为打开(默认的是此模式),若为SAVE则为保存。