A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马连家华 中级黑马   /  2012-5-31 18:22  /  2316 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Noword 于 2012-6-26 15:16 编辑

/*
制作一个窗体,在文本框中输入路径后,按回车,或点转到按钮
可以在文本区域中显示路径中的文件,输入错误弹出对话框提示输入的内容有误
*/
import java.io.*;
import java.awt.*;
import java.awt.event.*;
class GetDir
{
        //定义窗体中的组件
        private Frame f;
        private Button b;
        private TextField tf;
        private TextArea ta;
        private Dialog d;
        private Button db;
        private Label l;
        private String dirPath;
        public static void main(String[] args)
        {
                new GetDir();
        }
        GetDir()
        {
                init();
        }
        //绘制载入界面
        private void init()
        {
                f = new Frame("ShowDir");
                b = new Button("转到");
                tf = new TextField(30);
                ta = new TextArea(26,40);
                f.setBounds(500,100,366,500);
                f.setLayout(new FlowLayout());
                f.add(tf);
                f.add(b);
                f.add(ta);
                frameEvent();
                f.setVisible(true);
        }
        //事件
        private void frameEvent()
        {
                //窗体关闭按钮
                f.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                                System.out.println("执行窗体X按钮");
                                System.exit(0);
                        }
                });
                //添加转到按钮事件
                b.addActionListener(new ActionListener()
                {
                        public void actionPerformed(ActionEvent e)
                        {
                                textFieldOperator();
                        }
                });
                //文本框的回车事件
                tf.addKeyListener(new KeyAdapter()
                {
                        public void keyPressed(KeyEvent e)
                        {
                                if (e.getKeyCode() == KeyEvent.VK_ENTER)
                                {
                                        textFieldOperator();
                                }
                        }
                });
        }
        //对话框
        private void dialog()
        {
                //绘制对话框
                d = new Dialog(f,"错误信息",true);
                db = new Button("确定");
                l = new Label(dirPath+"是非法路径");
                d.add(l);
                d.add(db);
                d.setBounds(400,200,200,100);
                d.setLayout(new FlowLayout());
                d.setVisible(true);
        }
        private void dialogEvent()
        {
                //对话框X按钮事件
                d.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                                System.out.println("执行对话框X按钮");
                                d.setVisible(false);
                        }
                });
                //对话框按钮事件
                db.addActionListener(new ActionListener()
                {
                        public void actionPerformed(ActionEvent e)
                        {
                                System.out.println("对话框按钮被执行");
                                d.setVisible(false);
                        }
                });
        }
        //对话框的中文件的读取
        private void textFieldOperator()
        {
                //得到文本框中的数据
                dirPath = tf.getText();
                //封装成文件对象
                File dir = new File(dirPath);
                //判断文件对象是否存在,是否是目录
                if (dir.exists() && dir.isDirectory())
                {
                        //如果是,清空文本区域中的数据,并得到目录下的文件名
                        ta.setText("");
                        String[] names = dir.list();
                        //将文件名添加到文本区域中
                        for (String name : names)
                        {
                                ta.append(name+"\t\n");
                        }
                }
                else
                {        
                                  dialogEvent();
                                  dialog();
//位置调换后,出现了三楼的错误

                }
        }
}
运行后的dialog信息窗口关闭不了,怎么回事
快来高手



================================================================

正确代码

import java.io.*;
import java.awt.*;
import java.awt.event.*;
class GetDir
{
//定义窗体中的组件
private Frame f;
private Button b;
private TextField tf;
private TextArea ta;
private Dialog d;
private Button db;
private Label l;
private String dirPath;
public static void main(String[] args)
{
  new GetDir();
}
GetDir()
{
  init();
}
//绘制载入界面
private void init()
{
  f = new Frame("ShowDir");
  b = new Button("转到");
  tf = new TextField(30);
  ta = new TextArea(26,40);
  f.setBounds(500,100,366,500);
  f.setLayout(new FlowLayout());
  f.add(tf);
  f.add(b);
  f.add(ta);
  frameEvent();
  f.setVisible(true);
}
//事件
private void frameEvent()
{
  //窗体关闭按钮
  f.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    System.out.println("执行窗体X按钮");
    System.exit(0);
   }
  });
  //添加转到按钮事件
  b.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    textFieldOperator();
   }
  });
  //文本框的回车事件
  tf.addKeyListener(new KeyAdapter()
  {
   public void keyPressed(KeyEvent e)
   {
    if (e.getKeyCode() == KeyEvent.VK_ENTER)
    {
     textFieldOperator();
    }
   }
  });
}
//对话框
private void dialog()
{
  //绘制对话框
  d = new Dialog(f,"错误信息",true);
  db = new Button("确定");
  l = new Label(dirPath+"是非法路径");
  d.add(l);
  d.add(db);
  d.setBounds(400,200,200,100);
  d.setLayout(new FlowLayout());
dialogEvent();
  d.setVisible(true);
}
private void dialogEvent()
{
  //对话框X按钮事件
  d.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    System.out.println("执行对话框X按钮");
    d.setVisible(false);
   }
  });
  //对话框按钮事件
  db.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    System.out.println("对话框按钮被执行");
    d.setVisible(false);
   }
  });
}
//对话框的中文件的读取
private void textFieldOperator()
{
  //得到文本框中的数据
  dirPath = tf.getText();
  //封装成文件对象
  File dir = new File(dirPath);
  //判断文件对象是否存在,是否是目录
  if (dir.exists() && dir.isDirectory())
  {
   //如果是,清空文本区域中的数据,并得到目录下的文件名
   ta.setText("");
   String[] names = dir.list();
   //将文件名添加到文本区域中
   for (String name : names)
   {
    ta.append(name+"\t\n");
   }
  }
  else
  {
   dialog();
  }
}
}


确实是顺序的问题,谢楼下的哥们儿




9 个回复

倒序浏览
可以在 dialog()方法中给b添加一个事件监听器,代码如下:

private void dialog()
        {
                d = new Dialog(f,"错误信息",true);
                db = new Button("确定");
                l = new Label(dirPath+"是非法路径");
                d.add(l);
                d.add(db);
                d.setBounds(400,200,200,100);
                d.setLayout(new FlowLayout());
                d.setVisible(true);
               
                //添加的内容
                db.addActionListener(new ActionListener() {
                                       
                                        public void actionPerformed(ActionEvent e) {
                                                d.setVisible(false);
                                        }
                                });
               
        }
回复 使用道具 举报
可以在dialog()方法中给db按钮加上一个事件监听器,来控制dialog信息窗口的关闭。具体代码如下:

private void dialog()
        {
                d = new Dialog(f,"错误信息",true);
                db = new Button("确定");
                l = new Label(dirPath+"是非法路径");
                d.add(l);
                d.add(db);
                d.setBounds(400,200,200,100);
                d.setLayout(new FlowLayout());
                d.setVisible(true);
               
                //添加的内容
                db.addActionListener(new ActionListener() {
                                       
                                        public void actionPerformed(ActionEvent e) {
                                                d.setVisible(false);
                                        }
                                });
               
        }
回复 使用道具 举报
楼主,你把最后的dialogEvent();这句放在dialog()方法的d.setVisible(true);之前就OK了
因为你的代码执行到dialog();这句时,dialogEvent();还没被加载对话框就显示了
回复 使用道具 举报
张亭 发表于 2012-5-31 19:19
楼主,你把最后的dialogEvent();这句放在dialog()方法的d.setVisible(true);之前就OK了
因为你的代码执行到d ...

真的...原来还有个先后问题,怎么都没人告诉我呢...
不过,我程序写得还是有问题,怎么报这么多错误...
回复 使用道具 举报
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at GetDir.dialogEvent(getDir.java:90)
        at GetDir.textFieldOperator(getDir.java:129)
        at GetDir.access$000(getDir.java:8)
        at GetDir$3.keyPressed(getDir.java:69)
        at java.awt.Component.processKeyEvent(Component.java:6463)
        at java.awt.Component.processEvent(Component.java:6282)
        at java.awt.TextComponent.processEvent(TextComponent.java:675)
        at java.awt.TextField.processEvent(TextField.java:588)
        at java.awt.Component.dispatchEventImpl(Component.java:4861)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.ja
va:1893)
        at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboard
FocusManager.java:752)
        at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeybo
ardFocusManager.java:1017)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeybo
ardFocusManager.java:889)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFoc
usManager.java:717)
        at java.awt.Component.dispatchEventImpl(Component.java:4731)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703)
        at java.awt.EventQueue.access$000(EventQueue.java:102)
        at java.awt.EventQueue$3.run(EventQueue.java:662)
        at java.awt.EventQueue$3.run(EventQueue.java:660)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:87)
        at java.awt.EventQueue$4.run(EventQueue.java:676)
        at java.awt.EventQueue$4.run(EventQueue.java:674)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:673)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:244)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:163)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

无语了.这写得什么都...
回复 使用道具 举报
张亭 中级黑马 2012-5-31 19:41:44
7#
我这边执行一切OK...
回复 使用道具 举报
张亭 中级黑马 2012-5-31 19:43:07
8#
本帖最后由 张亭 于 2012-5-31 19:44 编辑

晕,不是调换位置,上代码吧
/*
制作一个窗体,在文本框中输入路径后,按回车,或点转到按钮
可以在文本区域中显示路径中的文件,输入错误弹出对话框提示输入的内容有误
*/
import java.io.*;
import java.awt.*;
import java.awt.event.*;

class GetDir {
        // 定义窗体中的组件
        private Frame f;
        private Button b;
        private TextField tf;
        private TextArea ta;
        private Dialog d;
        private Button db;
        private Label l;
        private String dirPath;

        public static void main(String[] args) {
                new GetDir();
        }

        GetDir() {
                init();
        }

        // 绘制载入界面
        private void init() {
                f = new Frame("ShowDir");
                b = new Button("转到");
                tf = new TextField(30);
                ta = new TextArea(26, 40);
                f.setBounds(500, 100, 366, 500);
                f.setLayout(new FlowLayout());
                f.add(tf);
                f.add(b);
                f.add(ta);
                frameEvent();
                f.setVisible(true);
        }

        // 事件
        private void frameEvent() {
                // 窗体关闭按钮
                f.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                                System.out.println("执行窗体X按钮");
                                System.exit(0);
                        }
                });
                // 添加转到按钮事件
                b.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                textFieldOperator();
                        }
                });
                // 文本框的回车事件
                tf.addKeyListener(new KeyAdapter() {
                        public void keyPressed(KeyEvent e) {
                                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                                        textFieldOperator();
                                }
                        }
                });
        }

        // 对话框
        private void dialog() {
                // 绘制对话框
                d = new Dialog(f, "错误信息", true);
                db = new Button("确定");
                l = new Label(dirPath + "是非法路径");
                d.add(l);
                d.add(db);
                d.setBounds(400, 200, 200, 100);
                d.setLayout(new FlowLayout());
                dialogEvent();//移到这了,兄弟
                d.setVisible(true);
        }

        private void dialogEvent() {
                // 对话框X按钮事件
                d.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                                System.out.println("执行对话框X按钮");
                                d.setVisible(false);
                        }
                });
                // 对话框按钮事件
                db.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                System.out.println("对话框按钮被执行");
                                d.setVisible(false);
                        }
                });
        }

        // 对话框的中文件的读取
        private void textFieldOperator() {
                // 得到文本框中的数据
                dirPath = tf.getText();
                // 封装成文件对象
                File dir = new File(dirPath);
                // 判断文件对象是否存在,是否是目录
                if (dir.exists() && dir.isDirectory()) {
                        // 如果是,清空文本区域中的数据,并得到目录下的文件名
                        ta.setText("");
                        String[] names = dir.list();
                        // 将文件名添加到文本区域中
                        for (String name : names) {
                                ta.append(name + "\t\n");
                        }
                } else {
                        dialog();
                }
        }
}
回复 使用道具 举报
为什么我上黑码论坛速度这么慢呢?开其它网站好好的
回复 使用道具 举报
Noword 发表于 2012-5-31 19:44
为什么我上黑码论坛速度这么慢呢?开其它网站好好的

我这也突然慢了,应该是服务器问题吧,上的人太多了估计:D
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马