2016-02-27 43 views
1

我注意到我无法解释的行为。在我的GUI中,在一个按钮上单击我显示一个具有面板和一堆文本字段的自定义Jdialog。我填充这些文本字段。在panel.setInvisible不更新值后设置JTextField值

这是我看到使用pseduo代码的场景。

public void actionPerformed(ActionEvent e) { 
    CustomDialog viewDialog = new CustomDialog (Jframe, true);     
    viewDialog.setVisible(true); 
    viewDialog.populateInfo(); 
} 

当上述代码运行,那么所有文本字段是空的。但是,如果我将setVisible移动到populateInfo方法之后,则会填充所有的textField。基本上,填充信息中的JTextField.setText似乎没有影响,如果setVisible发生在

这是为什么!

回答

1

可能你的CustomDialog类是模式的JDialog(也由true第二个构造函数的参数的建议)。如果是这样,那么呼叫代码中的程序流程将被呼叫setVisible(true)阻止,因此populateInfo()方法将仅在对话框不再可见后才会调用。解决方案如您所知 - 在显示对话框之前调用该方法。

这不是一个错误,而是一个功能。 :)
严重的是,既然您现在知道了一个事实,那么程序代码流将会暂停并且它将会恢复,因此您可以在调用setVisible(true)后安全地查询对话框的状态,并且确信在至少该对话已经呈现给用户,并且用户有时间与其交互并处置它。

+0

你明白了!我刚刚确认你的答案,使其无modless ..谢谢 – Snake

+0

@Snake:很高兴它帮助。我认为我使用90%的模式对话和10%的非模态对话。 –