日期:2014-05-20  浏览次数:20829 次

关于Dialog的小问题
Java code
import java.awt.*;
import java.awt.event.*;
public class Test {
     Frame f ;
     TextField text;
    Dialog d;
    
    Test(){
        init();
    }
    
    private void init(){
        f = new Frame();
        text = new  TextField(20);
        f.setBounds(100,100,200,200);
        f.add(text);
        f.setVisible(true);
        
        text.addKeyListener(new KeyAdapter(){
            public void keyPressed(KeyEvent e){
                if(e.getKeyCode()==KeyEvent.VK_ENTER){
                
                    d=new Dialog(f,"error",true) ;
                    System.out.println(d.getModalityType());
                    d.setSize(100,100);
                    d.setVisible(true);
                    //运行后,按ENTER调出对话框,按CTRL+ENTER则在console打印文本信息
                    System.out.println("1111111111111111");
                    /*                 问题在这里---->对话框调出后,语句到这里就不执行了,什么情况,求解释?????
                     根本没有打印1111111,于是下面代码的关闭对话框也没效果,222222也没打印出来,
                    在这里我只想要动态加载对话框,也就是如果不按ENTER就不去生成对话框以节省资源,
                    请大神不要让我把Dialog在定义时就初始化生成 */
                    
                    //而关键问题好像就在于,当我前面的一句改成d=new Dialog(f,"error",false);就没问题了,所以要怎么解决呢?
                    d.addWindowListener(new WindowAdapter(){
                        
                        public void windowClosing(WindowEvent e){
                            System.out.println("2222222222222");
                            d.setVisible(false);
                        }
                    });
                }
                
            
                if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){
                    System.out.println(text.getText());
                    text.setText("");
                }
                
            }
            }
        );
        
    
        f.addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });
        
        
    }
    public static void main(String[] args) {
        Test t = new Test();
    }

}


------解决方案--------------------
很正常啊:
d=new Dialog(f,"error",true);
你这个是“模态”对话框啊,激活后就会阻塞主窗体,关闭后主窗体才能继续运行。

要么就修改为:
d=new Dialog(f,"error",false);