黑马程序员——GUI编程

来源:互联网 发布:大众cc轮毂数据 编辑:程序博客网 时间:2024/06/07 01:39

 

------- android培训、java培训、期待与您交流! ---------- 

一、名词解释:

GUI

Graphical User Interface(图形用户接口)

•用图形的方式,来显示计算机操作的界面,这样更方便更直

观。

CLI

Command line User Interface (命令行用户接口)

•就是常见的Dos命令行操作。

•需要记忆一些常用的命令,操作不直观。

 

JavaGUI提供的对象都存在java.Awtjavax.Swing两个包中。

Awt Swing

java.AwtAbstract 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).

 

四、事件监听机制

组成:

事件源(组件):就是awtswing包中的那些图形界面组件。

事件(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.         ButtonaddActionListener(ActionListener)方法。ActionListener接口只有一个方法,所以直接用匿名内部类实现就可以了。形如: addActionListener(new ActionListener(){})

 

2.Action 事件

一般(不一定要这样)创建一个窗体类:

1.         先定义该图形中所需组件的引用。(没有在初始化函数中定义引用,是为了所有函数都能访问到)

2.         构造函数,将初始化函数init()写到其中。

3.         定义图形化界面初始化函数public void init(){}。在其中对组件进行初始化->将组件添加到frame->加载监听窗体事件的方法(最好把该方法从图形化界面初始化中分离出来,即在初始化函数外单独写该方法)->显示窗体。

4.         写监听窗体事件的方法,包含了所有“添加事件/动作监听器的方法”,如有对窗体的操作则调用addWindowListener(WindowListener)方法;有对Button的操作,则调用ButtonaddActionListener(ActionListener l)

5.         如果想要添加一个Button,则要用到Button特有的监听器,使用addActionListener(ActionListener l),该接口只有一个方法:actionPerformed(ActionEvert e) 由此可以总结:

a)         要想知道那个组件具备什么样的特有监听器,需要查看该组件对象的功能。

b)        如果某个组件的监听器(属于接口)中有多个方法(一般大于等于三个),为了方便使用,就会有一个对应的适配器(xxxadapter,实现了该接口所有方法的类),然后可以定义一个子类继承该适配器并只覆盖需要的功能方法,作为参数传递给添加监听器的方法。

c)        如果某个组件的监听器只有一两个方法,则一般不会有适配器,因为直接定义一个类实现其所有方法就可以了。(比如ButtonActionListener

 

3. 鼠标事件

我们一般要导入两个包:

Import java.awt.*;图形用户界面的所有组件

Import java.awt.event.*;所有组件的监听器和事件都在其中

鼠标事件和键盘事件,一般每个组件都有的,所以应该在Component中寻找该方法。

这里有一个问题需要注意:

如果对一个Button,同时定义了动作事件和鼠标的单机事件,当单机按钮是,会先执行鼠标单机事件再执行动作(Action)事件;但对于动作事件,鼠标单机有效果,键盘Enter也有效果,因此最好定义成Action,而不用鼠标单机事件。

鼠标事件对象可以调用自己的getClickCount()方法返回与此事件关联的鼠标单击次数。据此可以定义,鼠标双击,或更多击的响应动作。形式如:if(e.getClickCount==2){};

 

4. 键盘事件。

VK_?可以代表?键的数值,?是键的完整拼写形式,而且大写。

键盘事件的consume()方法,可以取消该次键盘事件。

 

练习-列出指定目录的内容

TextField(列数);只有一行,可以指定列数。

TextArea(行数,列数);文本框,可以指定行数和列数。

TextFieldTextArea从父类继承的方法:

getText();

setText();

append(String);在文本框中追加文本。

 

五、菜单

可以通过FramesetMenuBar()方法,添加菜单条;

可以通过MenuBar菜单条的add()方法添加Menu菜单;

可以通过Menu菜单的add方法添加Menu菜单或MenuItem菜单条目。(MenuMenuItem的子类)

Menu菜单有向右三角箭头,MenuItem没有。

FileDialog里有获取指定文件信息的方法:

getDirectory();获取打开的文件的路径,不包含文件名。

getFile();获取文件名。

若打开对话框后点击了取消,则getFile的返回值为空。

 如果点取消之前,也没有选择过任何文件,则getDirectory的返回值也为空。

Dialog的子类FileDialog类,显示一个用户可以从中选择文件的对话窗口。

构造方法之一:FileDialog(对话框所有者,对话框标题,mode)mode的值若为LOAD则为打开(默认的是此模式),若为SAVE则为保存。

 

 

原创粉丝点击