当前位置: 代码迷 >> J2SE >> GUI中Dialog 提示窗口无法关闭,请大家给分析一上是什么原因,多谢!
  详细解决方案

GUI中Dialog 提示窗口无法关闭,请大家给分析一上是什么原因,多谢!

热度:895   发布时间:2013-02-25 00:00:00.0
GUI中Dialog 提示窗口无法关闭,请大家给分析一下是什么原因,谢谢!!!
Java code
import java.awt.*;import java.awt.event.*;import java.io.*;class GuiDemo6{    public static void main(String []args)    {        MyGuiFrame mgf = new MyGuiFrame("文件目录");    }}class MyGuiFrame extends Frame{    private TextField tf;    private TextArea ta;    private Button btn;    private Label lab;    public MyGuiFrame(String title)    {        super(title);        setBounds(200,150,500,600);        setLayout(new FlowLayout());        tf = new TextField(50);        btn = new Button("转到");        ta = new TextArea(30,65);        add(tf);        add(btn);        add(ta);        setVisible(true);        myEvent();    }    private void myEvent()    {        addWindowListener(new WindowAdapter()        {            public void windowClosing(WindowEvent e)            {                setVisible(false);                dispose();                System.exit(0);            }        });        tf.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                            }        });        btn.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                ta.setText("");                getFile();            }        });    }    private void getFile()    {        String str = tf.getText();        File file = new File(str);        if(file.isDirectory())        {            String [] names = file.list();            for(String name :names)            {                ta.append(name+"\r\n");            }        }        else        {                        MyDialog dia = new MyDialog(this,"系统提示",true);            dia.setStr(str);            dia.run();        }    }}class MyDialog extends Dialog{    private Label lab ;    private Button btn;    private String str;    public MyDialog(Frame f, String s,boolean m)    {        super(f,s,m);        setBounds(250,200,280,200);        lab = new Label();                btn = new Button("确定");        setLayout(new FlowLayout());        add(lab);        add(btn);            }    public void setStr(String str)    {        this.str = str;    }    public void run()    {        String info = "对不起!你指定的目录:"+str+"是出错误的!";        lab.setText(info);        setVisible(true);        btn.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                setVisible(false);                dispose();            }        });        addWindowListener(new WindowAdapter()        {            public void windowClosing(WindowEvent e)            {                setVisible(false);                dispose();            }        });    }}


------解决方案--------------------------------------------------------
必须先添加事件,再setVisible(true),
严格地说来是,当添加了事件后,必须重新显示setVisible(true),事件才会生效,
如果本来就是可见的,再调用setVisible(true),事件也不会生效

详细可以研究:Component.show()的代码

  相关解决方案