黑马程序员技术交流社区

标题: 关于对话框dialog的小问题 [打印本页]

作者: 吴亨    时间: 2012-1-12 14:28
标题: 关于对话框dialog的小问题
本帖最后由 吴亨 于 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;
                }
        }

}
为什么我的对话框关不了?
作者: 张冬冬    时间: 2012-1-12 16:00
你注册关闭按钮的事件了吗,默认x按钮是没有事件的.
作者: 吴亨    时间: 2012-1-12 16:27
张冬冬 发表于 2012-1-12 16:00
你注册关闭按钮的事件了吗,默认x按钮是没有事件的.

注册了,加颜色的部分
作者: 刘基军    时间: 2012-1-13 09:32
这个问题解决了吗,我也想知道什么原因
作者: 王冀    时间: 2012-1-13 11:29
经测试是这句话有问题:dg.setVisible(true);

setVisible是一个阻塞式方法。在模式对话框关闭前它下面的语句都不被执行。
作者: 吴亨    时间: 2012-1-13 12:35
王冀 发表于 2012-1-13 11:29
经测试是这句话有问题:dg.setVisible(true);

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

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

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

在我这里将下面添加监听器的语句移到dg.setVisible(true)的上方后程序是可以正常执行的(对话框能显示,也能关闭)。
作者: 丁青松    时间: 2012-1-14 18:27
本帖最后由 丁青松 于 2012-1-14 18:32 编辑

dg = new Dialog(f,"错误提示",true);
把里面的ture改成false,设置成ture后,模式是永远显示,当dialog显示的时候,system退不出去,就关不成了。。。。。。。汗。。。因为粗心折腾我好久。。。。还有,后面那么多代码可以简写进入上面的else里面。。。。
试验后告诉我结果。。。。仅供参考。。。。
作者: 吴亨    时间: 2012-1-14 21:04
丁青松 发表于 2012-1-14 18:27
dg = new Dialog(f,"错误提示",true);
把里面的ture改成false,设置成ture后,模式是永远显示,当dialog ...

dg = new Dialog(f,"错误提示",true);
这里面的true是指对话框弹出来时,不能操作原窗口上其他的组件。不是显示。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2