黑马程序员 GUI

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

GUI (Graphical User Interface) 图形用户界面:

当年一个Windows系统覆盖了整个地球,就因其图形化的界面操作。对于非程序开发人员来说,图形界面比命令行的方式要好用的多,人脑对图形的记忆远比记住一些特定的命令轻松。但是对于开发人员来说,制作图形化界面是一件非常麻烦的事情,要写许多重复的代码。所以现在出了很多的界面制作的工具,可以通过控制画图来自动生成代码,不再需要我们去手写了。

这里只是介绍下GUI界面的实现方式以及事件监听机制的原理,让我们能理解GUI界面是通过什么原理实现的。当真正去做的时候,还是用现成的工具方便的多。


Awt和Swing:
1. java.Awt:Abstract Window ToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
2. javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。

GUI构架组成:



布局管理器:
容器中的组件的排放方式,就是布局。
常见的布局管理器:
1. FlowLayout(流式布局管理器)从左到右的顺序排列。Panel默认的布局管理器。
2. BorderLayout(边界布局管理器)东,南,西,北,中Frame默认的布局管理器。
3. GridLayout(网格布局管理器)规则的矩阵
4. CardLayout(卡片布局管理器)选项卡
5. GridBagLayout(网格包布局管理器)非规则的矩阵

通过添加这些容器和组件,加上合理的布局。就能构成一个图形化界面,但是这仅仅是一个界面而已,怎么使它按照我们想要的方式开始工作呢?这就是事件监听机制。


事件监听机制:


1. 确定事件源(容器或组件)
2. 通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
3. 该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
4. 一般用匿名内部类来表示。
5. 在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
6. 事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)


下面创建一个输入路径显示其下文件夹和文件名的界面:

package test;

import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

public class MyWindowDemo {
	private Frame f;
	private TextField tf;
	private Button but;
	private TextArea ta;
	
	private Dialog d;
	private Label lab;
	private Button okBut;
	
	MyWindowDemo(){
		init();   //在构造函数里面创造
	}
	//创建一个界面里的各种内容,文本框、转到按钮、文本区域、对话框等
	public void init(){
		f = new Frame("一个显示文件夹里面内容的窗口");
		f.setBounds(300, 150, 550, 450);
		f.setLayout(new FlowLayout());
		tf = new TextField(60);
		but = new Button("转到");
		ta = new TextArea(25, 60);
		
		d = new Dialog(f, "提示", true);
		d.setBounds(400, 300, 270, 120);
		d.setLayout(new FlowLayout());
		lab = new Label();
		okBut = new Button("确定");
		d.add(lab);
		d.add(okBut);
		
		f.add(tf);
		f.add(but);
		f.add(ta);
		
		myEvet();  //添加时间监听
		
		f.setVisible(true);
		
	}
	public void myEvet(){
			//关闭窗口
			f.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e){
					System.exit(0);
				}
			});
			//关闭对话框
			d.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e){
					d.setVisible(false);
				}
			});
			//关闭对话框
			okBut.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					d.setVisible(false);
				}
			});
			//转到操作,按enter键执行
			tf.addKeyListener(new KeyAdapter() {
				public void keyPressed(KeyEvent e){
					if(e.getKeyCode()==KeyEvent.VK_ENTER)
						showDir();
				}
			});
			//转到操作,鼠标点击转到执行
			but.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e){
					showDir();
				}
			});
		}
	
	public void showDir(){
		String dirPath = tf.getText();
		tf.setText("");   //清空文本框
		ta.setText("");  //清空文本区域
		File file = new File(dirPath);
		if( file.exists() && file.isDirectory()){
			String[] names = file.list();
			for(String name: names){
				ta.append(name+"\r\n");
			}
		}
		else{
			String info = "你输入的路径:"+dirPath+"不存在,请重新输入";
			lab.setText(info);
			d.setVisible(true);  //让对话框出现
		}
	}
	
	public static void main(String args[]){
		new MyWindowDemo();  //创建界面
	}
}
这样就能执行出和我们一般打开文件夹的效果来:



GUI界面的布局不是需要重点掌握的内容,我们需要详细了解的就是事件监听机制,如何写出执行效果来。



---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值