java GUI编程总结

来源:互联网 发布:3322域名更新 编辑:程序博客网 时间:2024/06/05 15:29

java GUI 两个包:java.awt和java.swing

 

awt:

abstract window toolkit(抽象窗口工具集)

需要调用本地系统(如:window)方法实现。


 为了减少平台不同而导致的图像差异,后来出现了swing

 

swing:

在awt基础上,建立一套图形界面系统,提供更多组件,完全由java实现,增强移植性,属轻量级控件

布局

1流式布局:按顺序布局     ;2边界布局:必须指定其方向,在相应的方向边界布局,没有指定方向则填充。3.格子布局:网格式布局,组件在小格子布局。4.网格包布局:一个组件占多个格子。5.卡片布局:按钮与内容相连,看起来像卡片。6.坐标式布局:想放哪就放哪。

事件监听机制

1.       事件源

2.       事件(event)

3.       监听器(Listener)

4.       事件处理(引发事件后处理方式)

我们按照上面的监听机制来分析下面的一段代码:
package lgh.gui;import java.awt.Button;import java.awt.FlowLayout;import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class FrameDemo {/** * @param args */public static void main(String[] args) {Frame f = new Frame("QQ");//多起了一个线程//f.setSize(500, 400);//f.setLocation(400, 150);f.setBounds(400,200,500,400);f.setLayout(new FlowLayout());//设置流式布局,默认为边界布局Button but = new Button("一个按钮");f.add(but);//将按钮添加到窗体中f.addWindowListener(new WindowAdapter(){@Overridepublic void windowClosing(WindowEvent e) {// TODO Auto-generated method stubsuper.windowClosing(e);System.exit(0);}});//在按钮上加一个监听but.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("button run .........");}});f.setVisible(true);System.out.println("over");}}
1.由主函数打印完了“over”,程序依然没有停止可以得到其实在new Frame()的时候启动了一个线程。
2.创建fram,设置框的大小,在显示屏上的位置,再设置布局方式。
3.再创建一个按钮,把按钮添加到窗体中。
4.为窗体添加一个事件地监听者,f.addWindowListener(),函数里面的参数就是事件监听者对象,对应着各种事件,这里由于要点击窗体的关闭按钮,所以传入里面的监听者应该是接口WindowListener,本应在创建匿名内部类时要实现接口里面的抽象方法,但是这里只需实现一个方法,所以找实现了接口的类作为父类再覆盖需要的方法。为了方便使用,所以接口加了一个实现类WindowAdapter,(一般当接口超过两个抽象方法时都会有一个实现了方法的适配器类(Adapter)用来方便调用) 所以有:
f.addWindowListener(new WindowAdapter(){@Overridepublic void windowClosing(WindowEvent e) {// TODO Auto-generated method stubsuper.windowClosing(e);System.exit(0);}});

5.事件处理:覆盖的方法就是当点击关闭按钮时调用的方法,方法体就是事件处理的内容。而windowClosing(WindowEvent e)中的参数e就是所发生的事件,把事件打印出来System.out.println(e);得到:sun.awt.TimedWindowEvent[WINDOW_CLOSING,opposite=null,oldState=0,newState=0] on frame0

6.监听器并不是监听所有的事件,只有相应的监听器才监听相应的事件,比如鼠标监听器MouseAdapter()监听鼠标事件,键盘监听器监听键盘事件。
再把整个方法调用流程梳理一下吧(以按钮所添加的监听器为例):

前提:一个按钮添加了动作监听器but.addActionListener(),并实现了相应方法。(见上述代码)
过程:当点击按钮时,系统会调用new ActionListener()实例中的actionPerformed()方法(new ActionListener.actionPerformed)并在该方法中传入参数ActionEvent e,而这个参数就是事件对象,这个事件对象所对应的类包含事件地一些信息和方法(如事件为点击鼠标,这个对象包含鼠标的信息包括右击还是左击,点击的次数,而相应的方法有获取点击次数等等)。方法体就是对事件做出了处理,响应。


0 0