java.awt简易小程序


package com.guiAWT;

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;

/***
 * 练习:文本框填写目录,点按钮后,将该目录下的文件和目录显示在文本区域中。
 * @author caojsvm
 * 运用到TextField、TextArea、Button、Dialog,以及事件
 * 
 * 窗体上的中文都显示方框的解决办法:
 *  点击MyEclipse的菜单【run】---【runConfigurations...】---窗口选项卡【Arguments】----[VM arguments:]文本框中填入:-Dfile.encoding=gbk
 *  即可解决
 */
public class FramePractice {
	private Frame f;
	private Button butt3;
	private TextField tf;
	private TextArea ta;
	
	private Dialog dg;
	private Label dgLab;
	private Button dgButt;
	
	public FramePractice() {
		//初始化
		init();
	}
	
	
	//初始化参数
	private void init() {
		this.f = new Frame("FrameDemo");
		
		/*************对Frame进行基本设置****************/
		//设置位置坐标、窗口大小: void setBounds(int x, int y, int width, int height)
		this.f.setBounds(600, 400, 500, 300);
		//更改布局管理器
		this.f.setLayout(new FlowLayout());
		
		//初始化组件
		butt3 = new Button("to");
		
		//长度为10的文本框
		//初始化的时候只能传入列数
		tf = new TextField(20);
		
		//初始化TextArea文本区域
		ta = new TextArea(10,60);
		
		
		//添加组件
		this.f.add(tf);
		this.f.add(butt3);
		this.f.add(ta);
		
		
		//加载窗体及组件的事件
		myEvent();
		
		//显示窗口
		this.f.setVisible(true);
		
	}
	
	/***
	 * 给窗体和组件添加事件
	 */
	private void myEvent() {
		//给窗体添加事件
		//查阅Frame类的父类Window的方法找到添加监听方法
		//查阅WindowListener监听API发现,这个接口有很多方法,所以找其适配器(实现类)WindowAdapter。
		//一般接口超过3个方法,都会有对应的适配器。
		this.f.addWindowListener(
				new WindowAdapter() {
					//关闭窗口
					public void windowClosing(WindowEvent e) {
						System.out.println("关闭窗口");
						System.exit(0);
					}
				}
		);
		
		
		this.butt3.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				System.out.println("点 我(butt3) 了 .....");
				
				String filePath = tf.getText();
				System.out.println("filePath="+filePath);
				//接收到文本框的数据后,将文本框的数据清空
				tf.setText("");
				readDir(filePath);
			}
		});
		
		//给文本框添加键盘事件
		this.tf.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				//System.out.println("键盘数据");
				//判断在文本框中按数字键接收数据
				int code = e.getKeyCode();
				if(code == e.VK_ENTER){
					System.out.println("键盘按键:回车,开始执行数据");
					
					String filePath = tf.getText();
					System.out.println("filePath="+filePath);
					//接收到文本框的数据后,将文本框的数据清空
					tf.setText("");
					readDir(filePath);
					
				}
				
			}
		});
	}
	
	
	/**
	 * 根据传入目录获取子目录和文件
	 * @param filePath
	 */
	private void readDir(String filePath){
		File fr = new File(filePath);
		
		//要判断:1、目录是否存在  2、是个目录
		if(!(fr.exists())){
			//System.out.println("填写的文件目录不存在。");
			ta.setText("Error: 填写的文件目录不存在。");
			
			//弹出对话框
			dialogInit();  //初始化
			dgLab.setText("Error: input dir:"+filePath+" ,is not exists!");
			dg.setVisible(true);  //弹出
			
			return;
		}
		
		if(!(fr.isDirectory())){
			ta.setText("Error: 填写的不是一个目录。");
			
			//弹出对话框
			dialogInit();  //初始化
			dgLab.setText("Error: input dir:"+filePath+" , is not directory!");
			dg.setVisible(true);  //弹出
			
			return;
		}
		
		//每次存入新数据时先清空一下文本区域
		ta.setText("");
		
		String[] filesName = fr.list();
		for(int i=0; i