GUI练习——列出指定目录内容

需求:

一个窗体里。在文本框输入路径后,摁回车键或者点击"转到"按钮后; 若路径合法,程序会自动在文本域里显示该路径下的文件目录;若路径非法,则弹出对话框,告之你路径非法。点击"确认"关闭对话框。

package Test603;

import java.awt.*;
import java.awt.event.*;
import java.io.File;

/**
 * 需求:一个窗体里。在文本框输入路径后,摁回车键或者点击"转到"按钮后,
 * 若路径合法,程序会自动在文本域里显示该路径下的文件目录;
 * 若路径非法,则弹出对话框,告之你路径非法。
 * 点击"确认"关闭对话框;
 * 
 * @author Administrator
 *
 */
public class MyWindow {
	
	private Frame fm;
	private Button bt;
	private TextField tf;
	private Dialog dl;
	private TextArea ta;
	private Label lb;
	private Button bt1;
	
	//把布局的一些设置放在类的构造函数里,使其一初始化,便开始加载这些布局
	MyWindow() {
		init();
	}
	public void init()
	{
		fm = new Frame("我的窗口");
		fm.setBounds(300, 100, 600, 500);
		fm.setLayout(new FlowLayout());//布局方式
		tf = new TextField(60);
		bt = new Button("转到");
		ta = new TextArea(25, 70);
		
		dl = new Dialog(fm, "错误提示信息", true); //初始化一个对话框
		dl.setBounds(400, 200, 240, 150);
		dl.setLayout(new FlowLayout());
	    lb = new Label("路径是无效的"); //初始化一个标签(对话框里的信息)
		bt1 = new Button("确认"); //初始化一个按钮(对话框里的)
		dl.add(lb);
		dl.add(bt1);
		
		fm.add(bt);//将组件添加到Farame中
		fm.add(tf);
		fm.add(ta);
		
		this.myEvent();//调用事件
		fm.setVisible(true);//设置初始时为可见的
	}

	//事件。里面定义监听器,
	private void myEvent()
	{
		//窗体的监听器,当点击了叉号后会关闭窗体
		fm.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		//按钮的监听器,当摁了按钮后,调用显示目录文件的方法showDir()
		bt.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				showDir();
			}
		});
		//对话框里按钮的监听器,当摁了后会关闭对话框
		bt1.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				dl.setVisible(false);		
			}
		});
		//键盘的监听器,当在文本框里输入路径后直接敲回车键,便可调用showDir()
		tf.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
				{
					showDir();
				}
			}
		});
	}

	
	/*定义列出文件目录的函数:
	 * 它先会判断从文本框输入的路径是否合法(是否存在并且是目录),
	 * 若合法,则列出该目录下的所有文件,添加到(append)到文本域中显示出来
	 * 若非法,则它会初始化一个对话框,并弹出告诉你错误信息
	 * */
	public void showDir()
	{
		String dirPath = tf.getText();
		File dir = new File(dirPath);
		if(dir.exists()&&dir.isDirectory())
		{
			ta.setText("");
			String[] dirNames = dir.list();
			for(String name:dirNames)
			{
				ta.append(name+"
");
			}
		}else 
		{
			dl.setVisible(true);
		}
	}
	public static void main(String[] args) {

		new MyWindow();
	}

}

我们的需求是基本实现了,但不太理想的地方是:对话框是只有输入非法路径的时候才会出现的,大多数情况下是不会出现的,但我们是给一初始化便加载了对话框,这造成了内存的浪费。我们应该思考如何改进。。。

原文地址:https://www.cnblogs.com/wangerxiansheng/p/3836382.html