------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
GUI概述
一、GUI概述
GUI,Graphical UserInterface,图形用户接口。用图形的方法,来显示计算机界面,这样更方便更直观。
之前我们有再使用dos命令行,那是在图形化界面之前,我们需要记得好多命令,这样比较麻烦,操作不直观。有图形化界面之后,操作起来就比较直观,因为可以直接看到图形化的操作块儿,减少了大量的记忆时间。
java给图形界面的包主要有两个:java.Awt和java.Swing。
java.Awt:Abstract WindowTookit(抽象窗口工具包),需要调用本地系统方法实现功能,较为依赖本地系统,属于重量级空间。
java.Swing:在AWT基础上,建立了一套图形见面系统,在其中提供了更多的组件,而且完全又java实现,增强了移植性,数轻量级控件。它的跨平台特别强。
看一下GUI的体系结构:
container:为容器,是一个特殊组件该组件可以通过add方法添加其他组件进来。
二、布局管理
布局管理,就是容器中的组件排放方式。常见的布局管理器:
FlowLayout,流式布局管理器,从左到右排序。Panel默认的布局管理器。每一行都是居中的。一行放不满就到第二行,也最先放到中间。
BorderLayout,边界布局管理器,东南西北中。Frame默认布局管理器。组件会靠近边界,如果不指定方位,这个组件就会充满整个窗口。
GridLayout,网格布局管理器,规则矩阵。把组件都存放到网格中。
GardLayout,卡片布局管理器,选项卡
GridBagLayout,网格包布局管理器,非规则的矩阵。
三、创建图形化界面的基本步骤
1、创建Frame窗体,属于Container容器的实现子类
Frame f = newFrame(“我的AWT”);
2、对窗体进行基本设置
整体布局:f.setLayout(布局管理器对象);
窗体的大小:f.setSize(intx , int y);这里x一般是横坐标大小,y是纵坐标大小
窗体的位置:f.setLocation(intx , int y);x和y窗口左上角距离屏幕左上角的横坐标和纵坐标。
3、定义组件
比如定义一个按钮Buttonb = new Button(String str);
4、将组件通过add方法添加到窗体中
f.add(b);
5、让窗体显示,通过setVisiable(true)
f.setVisiable(true);因为建立窗体最初是隐式的,只有设置可见的,才可以使窗体显示出来。
四、要点,事件监听机制
事件监听机制,个人理解来说,就像是因为某个事情的发生,导致触发了另一个事情。举两个例子,一是消防警报装置,消防警报装置会检测房屋里温度,一旦有火灾发生,温度变高,就会触发这个报警装置,然后消防车就会来。二是,像小说里讲的机关,当踩到一块砖,这块砖被踩下后就会触发机关,这机关就会动作,打开一扇门。
就是说,事件监听就是一个监听A,监听某个动作比如温度,这个A中还有对这个事件的处理方法;事件源B就是,就是被监听的事件,比如温度升高;外部动作C,能引发被监听事件方生,比如火灾会引起温度升高;温度升高就会产生一个对象D,这个D就告诉监听A你监听的动作发生了,这时A就会启动对这个事件的处理动作。
看图例:
从上图可以看出事件监听机制的特点:
1、事件源
2、事件
3、监听器
4、事件处理
在java中:
事件源就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己持有对应事件和共性事件。
监听器:将可以出发某一个事件的动作(不只一个动作)都已经封装到了监听器中
以上三者在java中定义好了,直接获取其对象就可以。我们要做的事情,就是对产生的动作进行处理,就是对监听器监听到的动作进行处理。
窗体事件监听
我们在Frame的父类Window中,发现一个方法时addWindowListener(WindowListenerl),直接用窗体对象调用即可。但是里面接收的是一个WindowListener对象。但查看这个对象,发现这是一个接口,里面有七个方法,这样我们实现的话需要把所有方法都复写,所以接着看其子类,有一个子类是WindowAdapter,这里面的把WindowListener的对象全部都复写了,但是方法为空,而且是一个抽象类。这样我们就可继承这个类,我们就可以复写其中我们需要的方法。程序为:
class MyWin extends WindowAdapter {
//覆盖其中一个方法
public voidwindowClosing(){
//对这个事件的处理方法
System.exit(0);
}
}
这样我们就在窗口监听器中传入这个对象:
f.addWindowListener( new Mywin() );
这样,当我们操作窗口中的关闭标签时,就会是程序退出,也就是关闭了窗口。因为这里对象时继承了WindowAdapter,所以可以用匿名内部类来实现。
f.addWindowListener(new WindowAdpter(){
public voidwindowListener(WindowEvent e){
System.exit(0);
}
});
还有其他方法,对窗口动作的监听,对窗口打开监听。覆盖我们需要的方法即可。
对按钮动作的监听
按钮就是事件源,那么选择哪个监听器呢?通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器,需要查看该组件对象的功能。通过查阅,发现按钮支持一个特有监听器addActionListener。具体操作步骤和上面窗口监听是一致的。
// 加入按钮动作监听
button.addActionListener(new ActionListener(){
// 复写actionPerformed方法,接口ActionListener中只有一个抽象方法
public voidactionPerformed(ActionEvent e){
System.exit(0);
}
});
这个程序就是建立了一个按钮监听机制,当按动按钮时,就会推出程序。
对鼠标和键盘事件的监听
鼠标和键盘基本上所有地方都要用到,所以这个监听器应该是定义在Component中,会发现MouseListener这个监听器,这个接口中有五个方法,所以一定有适配器,就找到MouseAdapter这个子类,我们在按钮上加上这个监听,那么使用方法还是一样:
button.addMouseListener( new MouseAdapter(){
public voidmouseEntered(MouseEvent e){
System.out.println(“鼠标进入”);
}
});
鼠标事件中,MouseEvent中包含方法和鼠标具体事件,如获取鼠标点击次数等等。
添加键盘监听
button.addKeyListener(new KeyAdapter(){
public voidkeyPressed(KeyEvent e){
System.out.println(e.getChar());
}
});
同样,在键盘中有各种字段,就是键盘动作,如按某个键,返回某个按键的字符等等。在keyEvent中,注意一个方法,consume()这个方法不会按照默认的方法来处理此事件,就是说,原来时怎么样默认动作的,现在就不会进行这样的动作了。
对话框Dialog和FileDialog
Dialog是基于一个Frame窗口的,所以其构造函数接收一个Frame对象,同时接收一个字符串和一个boolean值:
Dialog d = new Dialog(Frame f , String s , mode);
其中,mode是两个值true和false。true时,当对话框弹出,对话框基于的窗口就不能操作,必须操作当前弹出的对话框。false时,可以操作对话框基于的窗口。
因为Dialog也是窗口,所以可以在其中加入按钮,便签等组件。有一点注意的是,当弹出对话框后,我们必须对对话框中的事件进行监听,这里操作关闭对话框的时候,不要使用System.exit(0)这个方法,是对话框隐藏即可,即setVisiable(false)。