- 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);