2016-02-27 74 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%的非模態對話。 –