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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴亨 黑马帝   /  2012-1-12 14:28  /  3393 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴亨 于 2012-1-14 21:05 编辑

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
class TextGui
{
        private Frame f;
        private Button btn;
        private TextField tf;
        private TextArea ta;

   
        public static void main(String[] args)  throws Exception
        {
                new TextGui();
        }
    public TextGui() throws Exception
        {
       init() ;
        }
        public  void init() throws Exception
        {
           f = new Frame("文件搜索");
           f.setBounds(200,100,600,600);
           f.setLayout(new FlowLayout());
           f.setVisible(true);
           btn = new Button("显示文件");
           tf = new TextField(60);
           ta = new TextArea(30,70);
        f.add(btn);
           f.add(tf);
           f.add(ta);

           myEvent();
        }
        public  void myEvent() throws Exception
        {
        
                f.addWindowListener(new WindowAdapter()
                {
           public void windowClosing(WindowEvent e)
                        {
                           f.dispose();
                           System.exit(0);
                        }
                });

                btn.addActionListener(new ActionListener()
                {
                        public void actionPerformed(ActionEvent e)
                        {
                                showDir();
                        }
                });
        }

    public void showDir()
        {
            File dir = new File( tf.getText());
                        if(dir.exists() && dir.isDirectory())
                    {
                                String[] names = dir.list();     
                                ta.setText("");
                                for(String name : names)
                                {
                                  ta.append(name+"\r\n");
                                }
                        }
                        else
                    {
                               
                 new MyDialog().getMyDialog();
                       
                    }
        }

        class MyDialog
        {
       private Dialog dg ;
               
                public MyDialog()
                {
            dg = new Dialog(f,"错误提示",true);
            dg.setBounds(300,200,300,300);
                    dg.setVisible(true);

                        dg.addWindowListener(new WindowAdapter()  //这句话不能执行吗?
                        {
                           public void windowClosing(WindowEvent e)
                                {

                                   dg.dispose();
                                   System.exit(0);
                                }
                        });
                }

                public Dialog getMyDialog()
                {
                        return dg;
                }
        }

}
为什么我的对话框关不了?

评分

参与人数 1黑马币 +1 收起 理由
老罗 + 1 怎么解决的?

查看全部评分

9 个回复

倒序浏览
你注册关闭按钮的事件了吗,默认x按钮是没有事件的.

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
张冬冬 发表于 2012-1-12 16:00
你注册关闭按钮的事件了吗,默认x按钮是没有事件的.

注册了,加颜色的部分

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
这个问题解决了吗,我也想知道什么原因
回复 使用道具 举报
经测试是这句话有问题:dg.setVisible(true);

setVisible是一个阻塞式方法。在模式对话框关闭前它下面的语句都不被执行。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
王冀 发表于 2012-1-13 11:29
经测试是这句话有问题:dg.setVisible(true);

setVisible是一个阻塞式方法。在模式对话框关闭前它下面的语 ...

王兄是说把dg.setVisible(true);放到最后吗?
但好像也不行,甚至对话框都弹不出来。
能详细指点一下小弟吗?
回复 使用道具 举报
王冀 黑马帝 2012-1-14 16:14:48
7#
只有带模式(就是打开后父窗口不能访问)的Dialog对象的setVisible才会阻塞,具体可以去看api文档。

在我这里将下面添加监听器的语句移到dg.setVisible(true)的上方后程序是可以正常执行的(对话框能显示,也能关闭)。
回复 使用道具 举报
王冀 黑马帝 2012-1-14 16:15:33
8#
只有带模式(就是打开后父窗口不能访问)的Dialog对象的setVisible才会阻塞,具体可以去看api文档。

在我这里将下面添加监听器的语句移到dg.setVisible(true)的上方后程序是可以正常执行的(对话框能显示,也能关闭)。
回复 使用道具 举报
丁青松 黑马帝 2012-1-14 18:27:09
9#
本帖最后由 丁青松 于 2012-1-14 18:32 编辑

dg = new Dialog(f,"错误提示",true);
把里面的ture改成false,设置成ture后,模式是永远显示,当dialog显示的时候,system退不出去,就关不成了。。。。。。。汗。。。因为粗心折腾我好久。。。。还有,后面那么多代码可以简写进入上面的else里面。。。。
试验后告诉我结果。。。。仅供参考。。。。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 赞一个!

查看全部评分

回复 使用道具 举报
吴亨 黑马帝 2012-1-14 21:04:40
10#
丁青松 发表于 2012-1-14 18:27
dg = new Dialog(f,"错误提示",true);
把里面的ture改成false,设置成ture后,模式是永远显示,当dialog ...

dg = new Dialog(f,"错误提示",true);
这里面的true是指对话框弹出来时,不能操作原窗口上其他的组件。不是显示。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马