在panel.setInvisible之后设置JTextField值不会更新值

时间:2016-02-27 14:33:36

标签: java swing

我注意到一种我无法解释的行为。在我的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似乎没有影响

为什么会这样!

1 个答案:

答案 0 :(得分:1)

可能您的CustomDialog类是 模态 JDialog(也是true第二个构造函数参数所建议的)。如果是这样,则setVisible(true)调用会阻止调用代码中的程序流,因此只有在对话框不再可见后才会调用populateInfo()方法。您已经知道解决方案 - 在显示对话框之前调用该方法。

这不是一个错误,而是一个功能。 :)
说真的,既然你知道程序代码流何时停止以及何时恢复,那么你可以在调用setVisible(true)之后安全地查询对话框的状态,并确信在至少对话框已呈现给用户,用户有时间与之交互并处理它。