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+"\r\n"); } }else { dl.setVisible(true); } } public static void main(String[] args) { new MyWindow(); } }
我们的需求是基本实现了,但不太理想的地方是:对话框是只有输入非法路径的时候才会出现的,大多数情况下是不会出现的,但我们是给一初始化便加载了对话框,这造成了内存的浪费。我们应该思考如何改进。。。