(97)窗体练习:输出路径下的文件或者目录_键盘监听
(97)窗体练习:输出路径下的文件或者目录_sed_02
第一张图:主窗体
第二张图:对话框
需求:在文本框中输入一个目录,点击“转到”或者enter都能将目录对应的文件打印在文本区域中,若不是正确的路径,则弹出对话框

import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class LianXi {

    private Frame  f;
    private TextField tf;
    private Button but;

    private TextArea ta;
    private  Dialog  d;
    private  Label lab;
    private Button okbut;


    LianXi(){
        init();

    }
    public void init() {
        //设置主窗体界面
        f=new Frame("myFrame");
        f.setSize(500, 400);
        f.setLocation(300, 200);
        f.setLayout(new FlowLayout());


        tf=new TextField(20);
        f.add(tf);
        but =new Button("转到");
        f.add(but);

        ta=new TextArea(15,40);
        f.add(ta);

        //设置对话框界面
         d=new Dialog(f,"提示信息",true);
         d.setBounds(400, 200, 240, 150);
         d.setLayout(new FlowLayout());

         lab=new Label();
         okbut=new Button("确定");

         d.add(lab);
         d.add(okbut);



        f.setVisible(true);

        event();
    }
    public void event() {


        //主窗体监听关闭
    f.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {

            System.exit(0);
        }

    }); 

    //对话框中确定按钮监听关闭
    okbut.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            d.setVisible(false);//这里不能写System.exit(0);主窗体还没操作结束
        }

    });

    //按钮监听按下事件
    but.addActionListener(new ActionListener() {



        public void actionPerformed(ActionEvent e)
        {
            showDir();


        }   
    });

    //键盘监听enter
        tf.addKeyListener(new KeyAdapter() {

            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode()==KeyEvent.VK_ENTER)
                     showDir();
            }
        });

    }



    public void showDir()//按钮和键盘敲入回车都能将文件打印在文本区域中,
    //他们监听的事件处理方式都是相同的,封装成一个函数,在相应的匿名内部类中调用该方法
     {
        String str=tf.getText();
        //获取目录下的文件
        File dir=new File(str);
            if(dir.exists()&&dir.isDirectory())
            {
                ta.setText(null);//每次输入正确目录应该将之前的文本区域文件清空
                String [] names=dir.list();
                for(String name:names)
                {
                   ta.append(name+"\r\n");//不能用ta.setText方法,否则只能显示最后一个文件项

                 }

             }
            else
            {
                String info="您输入的信息:"+tf.getText()+"  是错误的";
                lab.setText(info);  
                d.setVisible(true);


            }

    }


}