java GUI编程总结

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(){

			@Override
			public void windowClosing(WindowEvent e) {
				// TODO Auto-generated method stub
				super.windowClosing(e);
				System.exit(0);
			}
			
		});
		
		//在按钮上加一个监听
		but.addActionListener(new ActionListener() {

			@Override
			public 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(){

			@Override
			public void windowClosing(WindowEvent e) {
				// TODO Auto-generated method stub
				super.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,而这个参数就是事件对象,这个事件对象所对应的类包含事件地一些信息和方法(如事件为点击鼠标,这个对象包含鼠标的信息包括右击还是左击,点击的次数,而相应的方法有获取点击次数等等)。方法体就是对事件做出了处理,响应。


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值