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