2016-07-22 99 views
-1

我正在開發,其中在某些時候用戶打開模式對話框中選擇一個區域在編輯器中編輯:的JDialog返回值太早

Dialog

隨着「選擇區域點擊...「對話框暫時設置爲setVisible(false);不可見。之後用戶可以用鼠標選擇一個區域。釋放鼠標按鈕後,對話框將重新打開,並且setVisible(true);將在文本字段中顯示所選區域的信息。當用戶點擊「確定」時,對話框被丟棄並且信息應該返回給編輯器。

返回對話框值的代碼是

@Override 
public Area handleDialog() { 
    setVisible(true); // Shows the dialog and blocks the parent window 
    return selectedArea; 
} 

我現在的問題是,值返回太早,當調用setVisible(false);發生,而不是當用戶點擊「確定」。所以返回null,因爲selectedArea尚未分配。我認爲會發生這種情況,因爲暫時隱藏對話框將重置模式並再次解鎖父窗口。

有沒有可能阻止返回值,只有在點擊「確定」時才返回它?如果沒有,我想我可以重寫我的邏輯,並使用WindowListener而不是繞過這個。

+0

你確定你的對話框是模態嗎? – VGR

+0

@VGR是的,它擴展了'JDialog',並且在構造函數中我調用'super(JOptionPane.getRootFrame(),true);' – QBrute

回答

-1

我還沒弄清楚,但我遵循了我的替代路線。我不再依賴對話框本身的返回值,而是通過DefaultListModel(我最初想要用數據填充)到對話框。在點擊「確定」後,我直接填寫它。

它不漂亮,但它的工作。