黑马程序员_GUI概述

来源:互联网 发布:《算法》读书笔记 编辑:程序博客网 时间:2024/05/20 08:27

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 

GUI概述

一、GUI概述

GUIGraphical UserInterface,图形用户接口。用图形的方法,来显示计算机界面,这样更方便更直观。

之前我们有再使用dos命令行,那是在图形化界面之前,我们需要记得好多命令,这样比较麻烦,操作不直观。有图形化界面之后,操作起来就比较直观,因为可以直接看到图形化的操作块儿,减少了大量的记忆时间。

java给图形界面的包主要有两个:java.Awtjava.Swing

java.AwtAbstract 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);xy窗口左上角距离屏幕左上角的横坐标和纵坐标。

3、定义组件

         比如定义一个按钮Buttonb = new Button(String str);

4、将组件通过add方法添加到窗体中

         f.add(b);

5、让窗体显示,通过setVisiabletrue

         f.setVisiable(true);因为建立窗体最初是隐式的,只有设置可见的,才可以使窗体显示出来。

 

 

 

四、要点,事件监听机制

事件监听机制,个人理解来说,就像是因为某个事情的发生,导致触发了另一个事情。举两个例子,一是消防警报装置,消防警报装置会检测房屋里温度,一旦有火灾发生,温度变高,就会触发这个报警装置,然后消防车就会来。二是,像小说里讲的机关,当踩到一块砖,这块砖被踩下后就会触发机关,这机关就会动作,打开一扇门。

就是说,事件监听就是一个监听A,监听某个动作比如温度,这个A中还有对这个事件的处理方法;事件源B就是,就是被监听的事件,比如温度升高;外部动作C,能引发被监听事件方生,比如火灾会引起温度升高;温度升高就会产生一个对象D,这个D就告诉监听A你监听的动作发生了,这时A就会启动对这个事件的处理动作。

看图例:

 

 

 

 

从上图可以看出事件监听机制的特点:

1、事件源

2、事件

3、监听器

4、事件处理

java中:

事件源就是awt包或者swing包中的那些图形界面组件。

事件:每一个事件源都有自己持有对应事件和共性事件。

监听器:将可以出发某一个事件的动作(不只一个动作)都已经封装到了监听器中

以上三者在java中定义好了,直接获取其对象就可以。我们要做的事情,就是对产生的动作进行处理,就是对监听器监听到的动作进行处理。

 

 

窗体事件监听

我们在Frame的父类Window中,发现一个方法时addWindowListenerWindowListenerl),直接用窗体对象调用即可。但是里面接收的是一个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()这个方法不会按照默认的方法来处理此事件,就是说,原来时怎么样默认动作的,现在就不会进行这样的动作了。

 

 

                对话框DialogFileDialog

                Dialog是基于一个Frame窗口的,所以其构造函数接收一个Frame对象,同时接收一个字符串和一个boolean值:

                Dialog  d = new DialogFrame f String s mode);

其中,mode是两个值truefalsetrue时,当对话框弹出,对话框基于的窗口就不能操作,必须操作当前弹出的对话框。false时,可以操作对话框基于的窗口。

                因为Dialog也是窗口,所以可以在其中加入按钮,便签等组件。有一点注意的是,当弹出对话框后,我们必须对对话框中的事件进行监听,这里操作关闭对话框的时候,不要使用System.exit(0)这个方法,是对话框隐藏即可,即setVisiablefalse)。

 

 

 

 

0 0