AWT 编程基础(一)

这篇博客介绍了AWT编程基础,包括容器(Window和Panel)、常用组件(Button, Label等)、布局管理器(FlowLayout, BorderLayout等)以及事件处理(ActionEvent等)。通过实例展示了如何创建图形界面,并强调了布局管理和事件监听器在AWT中的应用。" 8133950,1354198,C++实现委托与事件代理,"['C++编程', '事件处理', '代理模式', '函数指针', '面向对象']

AWT用来编写图形化界面,它所创建的图形界面应用和所在的运行平台的风格一致,也就是说它是调用系统本地的图形界面来创建的。

通过AWT来建立一个图形化界面通常要容器(也就是我们常见到的窗口),布局管理器(主要用来控制各个组件的摆放位置),各个组件(按钮,文本框等等)及对事件的处理(点一下按钮的反应等等)


1.容器

AWT主要有两个容器:Window和Panel

           其中Window是可以独立存在的,panel则不能独立存在,它可以添加到(Window,panel.....中),我们通常使用AWT时就要首先创建一个可以独立存在的Window窗口,多数情况下,我们使用的是Window的子类Frame。我们来通过Frame创建一个窗口

import java.awt.*;    //导包
public class FreamDemo {
	public static void main(String[] args) {
		Frame f=new Frame("Test Fream");  //先new一个f窗口
		f.setBounds(30,30,250,200);//设置窗口的大小和位置
		f.setVisible(true);//让窗口可见,默认创建出来的是隐藏的
	}
}

            panel容器必须放在其他容器中,使用方法和Frame相仿。

import java.awt.*;    //导包
public class FreamDemo {
	public static void main(String[] args) {
		Frame f=new Frame("Test Fream");  //先new一个f窗口
		Panel p=new Panel(); //创建panel容器
		f.add(p);//将p容器加到Frame中
		f.setBounds(30,30,250,200);//设置窗口的大小和位置
		f.setVisible(true);//让窗口可见,默认创建出来的是隐藏的
	}
}

          ScrollPane是可以创建一个带滚动条的容器,他也不能独立存在

2.常用组件

     常用组件有Button(按钮),Label(标签类),TextArea(多行文本框),TextField(单行文本框)

       还有我们会常用到的Dialog(对话框)

        直接在实战中体验他们的作用

    

import java.awt.*;//日常导包
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class DialogDemo {
	
	private Frame f;
	private Button b;
	private Label l;
	private TextField tf;
	private TextArea ta;
	private Dialog d;
	
	public DialogDemo(){   //在构造器中直接运行建立窗口的函数
		init();
	}
	
	public void init() {
		f=new Frame("test");//创建新窗口
		f.setBounds(300,100,600,500);//设置大小位置
		f.setLayout(new FlowLayout()); //使用流式布局管理器
		b=new Button("test button");//创建新按钮
		l=new Label("test label");//创建新标签
		tf=new TextField("test TextField");//创建新文本域
		ta=new TextArea("test textarea");
		d=new Dialog(f,"test dialog",true);//创建对话框
		d.setBounds(300,400,200,100); //设置对话框的大小和位置
		d.setLayout(new FlowLayout());//使用流式布局管理器
		f.add(l);//将它们添加到窗口中
		f.add(tf);
		f.add(ta);
		f.add(b);
		myEvent();//事件处理
		f.setVisible(true);//使窗口可见
	}
	
	private void myEvent() {   //事件处理
		b.addActionListener(new ActionListener() {    //添加监听器
			public void actionPerformed(ActionEvent e) {
				d.setVisible(true);//当鼠标点击按钮后,弹出对话框
			}
		});
	}

	public static void main(String[] args) {
		new DialogDemo(); //创建一个窗口
	}
}

        解释,程序运行后会产生一个窗体,在窗体中有以上所提到的组件,点击按钮后,会弹出对话框


3.布局管理器

    上个程序我们就使用了布局管理器,所使用的管理器为流式管理器,我们常用的管理器有

    FlowLayout:组件从左向右以此排列,遇到边界会自动换行(默认是从中间开始)

    BorderLayout:将容器分为东南西北中五个区域,添加是可指定区域添加

    GridLayout:就像计算器的按键那样排列,规则网格式

    GridBagLayout:一个组件可以跨越多个网格

    等等........

    还可以自己给组件定位,设置绝对的位置(会丧失跨平台性)


4.事件处理

    当我们点击一个按钮或者作出某些外接设备的操作时,我们的程序需要对我们的这一动作进行反应,比如我的程序有一个按钮,这个按钮被一个监听器监听着,现在我们点击这个按钮,监听器触发,程序就会产生反应。

    首先将事件监听器注册在事件源上,当外部动作触发事件源后,时间源会将事件封装,传递给事件监听器,(这些都是虚拟机做的事),而我们就是要写,接下来事件监听器要干的事。(参考上个程序中点击按钮后,弹出对话框)

    事件有低级事件和高级事件(列举了些常用的)

                低级事件:WindowEvent:窗口事件,我们平时的窗口关闭,最小化等等

                                  KeyEvent:键盘事件,键盘的触发

                                   MouseEvent:鼠标事件,鼠标的点击

                 高级事件:ActionEvent:动作事件,按钮,菜单栏被单击时触发,上个程序中我们使用的就是这个事件

    当有事件后,我们要去处理事件,每个事件都有适配器,事件适配器可以让我们简化步骤,不用详细的写全部的操作步骤,只需要写我们所需要的功能即可,如WindowEvent的适配器为WindowAdapter

    举例一个常用的方法实现监听器(匿名内部类)

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ActioEventDemo {

	private Frame f;
	private Button b;
	public ActioEventDemo() {
		init();
	}
	public void init() {
		f=new Frame();
		b=new Button("Test");
		f.setBounds(300,400,200,300);
		f.add(b);
		myEvent();
		f.setVisible(true);
	}
	private void myEvent() {
		//这是一个匿名内部类
		b.addActionListener(new ActionListener() {//为按钮b注册一个事件监听器,点击b按钮时触发,进入该监听器
			
			@Override
			public void actionPerformed(ActionEvent e) {
				//点击按钮后要做的动作
			}
		});
	}
	
	public static void main(String[] args) {
		new ActioEventDemo();
	}
}


为什么需要GUI? 我们前面编写的程序命令行的,用户的体验度极差。 抽象窗口工具包(Abstract Window Tookit)是为java程序提供建立图形用户界面(Graphics User Interface GUI)的工具集。主要包含如下组件: 1. 用户界面组件 2. 事件处理模型 3. 图形图像工具(形状、颜色、字体) 4. 布局管理器 AWT的优势: 1. 最早的JAVA GUI包,内嵌到JDK中,无需引入其他类,功能稳定 2. AWT组件都是线程安全的 3. 界面编程基础. 学会AWT, 很容易去学swing/SWT等功能较强大的GUI组件. AWT的缺点: 1. 组件的创建完全依赖操作系统实现,导致不同的操作系统下出现不同的外观。 说白了,awt的组件是由操作系统绘制的,我们也说awt组件是重量级的组件。 这个工具包提供了套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着对应的关系,我们把它称为peers。也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不样的,在个平台上存在的功能在另外个平台上则可能不存在。为了实现Java语言所宣称的"次编译,到处运行"的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。 AWT并没有为GUI组件提供真正的实现,而是调用运行平台的GUI组件来创建和平台致的对等体peers,因此程序中Textarea实际上是windows的多行文本域组件的对等体,具有和他相同的行为。所以,你右键单击textarea会出现菜单… 2. 线程安全导致运行速度慢 3. 为了保证程序的可移植性,AWT组件集遵循最大公约数原则,即AWT只拥有所有平台上都存在的组件的公有集合。有些常用的组件不支持,比如:表、树、进度条等。字体也只能支持4种。 为什么还需要学习AWT? 实际开发中使用AWT的情况非常少,但是我们仍然有必要学习AWT。主要原因如下: 1. Swing是在AWT基础上构建的,事件模型和些支持类(形状、颜色、字体)样。掌握AWT有利于后面学习SWING. Eclipse不是swing开发的,是swt开发的。 2. 学习下GUI编程。事实上,编程思路和其他语言类似
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值