我注意到一种我无法解释的行为。在我的GUI中,在按钮上单击我显示一个自定义Jdialog,它有面板和一堆文本字段。我填充了这些文本域。
以下是我使用pseduo代码看到的情景。
string path = @"SOFTWARE\7-Zip";
RegistryKey keys32 = RegistryKey.OpenBaseKey ( RegistryHive.LocalMachine, RegistryView.Registry32 );
RegistryKey rkPath = null;
rkPath = keys32.OpenSubKey ( path );
if ( rkPath == null )
{
Console.WriteLine ("32 bit version is null. Let's try 64 bit version");
RegistryKey keys64 = RegistryKey.OpenBaseKey ( RegistryHive.LocalMachine, RegistryView.Registry64 );
rkPath = keys64.OpenSubKey ( path );
}
string result = rkPath.GetValue ( "Path" ).ToString ( );
当上面的代码运行时,所有文本字段都为空。但是,如果我将setVisible移动到populateInfo方法之后,则会填充所有textField。基本上,如果setVisible发生在
之前,填充信息中的JTextField.setText似乎没有影响为什么会这样!
答案 0 :(得分:1)
可能您的CustomDialog
类是 模态 JDialog(也是true
第二个构造函数参数所建议的)。如果是这样,则setVisible(true)
调用会阻止调用代码中的程序流,因此只有在对话框不再可见后才会调用populateInfo()
方法。您已经知道解决方案 - 在显示对话框之前调用该方法。
这不是一个错误,而是一个功能。 :)
说真的,既然你知道程序代码流何时停止以及何时恢复,那么你可以在调用setVisible(true)
之后安全地查询对话框的状态,并确信在至少对话框已呈现给用户,用户有时间与之交互并处理它。