2012-04-27 153 views
0

我正在編寫一個javafx程序,我需要創建並使用我自己的基於舞臺的(Javafx.Stage)對話框來顯示消息和確認。我寫了所有必要的代碼,但我有一個問題:創建一個JavaFX對話框

對話框必須停止執行代碼的其餘部分,直到給出「是」,「否」或「重試」等響應。當我使用我的對話框如「DialogBox.ShowMessage」時,舞臺會出現消息和按鈕。但是,正如您可能認爲的那樣,其餘代碼將繼續執行。我怎樣才能解決這個問題?當我創建舞臺時,它必須停止其他線程或它依賴的線程。我通過互聯網搜索了這裏,但我找不到確切的解決方案。一個想法是使用「javafx.event.EventDispatcher」或「javafx.event.EventDispatchChain」,但我無法弄清楚如何使用它們。另一個想法是使用「java.awt.EventQueue」。這裏有一些有用的東西:我可以控制舞臺表演和隱藏事件,並顯示或隱藏事件處理程序。我認爲som排序的線程隊列可用於其中一個特定部分。

我希望我澄清一下情況。簡而言之,我需要在使用另一個階段和自己的代碼的同時管理線程。

謝謝。

回答

1

關於執行暫停有一個Jira的問題http://javafx-jira.kenai.com/browse/RT-19783
作爲解決方法,我不知道如何使用EventDispatcher和EventDispatchChain來解決此問題,但可以發送EventHandler s作爲參數。例如,

public static void ShowMessage(final EventHandler<ActionEvent> okAction, final EventHandler<ActionEvent> cancelAction){ 

    // Define and add buttons to the "view" and show message 

    btnOk.setOnAction(new EventHandler<ActionEvent>() { 
     public void handle(ActionEvent event) { 
     okAction.handle(null); 
     } 
    }); 

    btnCancel.setOnAction(new EventHandler<ActionEvent>() { 
     public void handle(ActionEvent event) { 
     cancelAction.handle(null); 
     } 
    }); 
} 

,並把它作爲,

DialogBox.ShowMessage(
new EventHandler<ActionEvent>() { 
     @Override public void handle(ActionEvent arg0) { 
     // Do stuff when "ok" clicked. 
}, 
new EventHandler<ActionEvent>() { 
     @Override public void handle(ActionEvent arg0) { 
     // Do stuff when "cancel" clicked. 
}); 

我同意這種說法是一種然而「曲徑通幽」的方式。
Siteyehoşgeldin ve kolay gelsin。

+0

感謝您的提示。根據你的回答讓我再解釋一遍。您給出的示例鏈接強調了我已經完成的應用程序模式。該示例阻止了非CODE界面。這是我的問題。我使用的是兩次,第二條消息不等第一次關閉。換句話說,第二階段是在第一階段結束之前顯示的。據我所知,你的事件處理程序建議是關於確定或取消按鈕的東西。我已經做到了。我打電話給窗口,它阻止了界面,但不是代碼。 Teşekkürler。 – 2012-04-27 10:46:07

+0

問題記者附帶的例子**是關於在顯示子階段後執行(代碼)阻塞的**。考慮仔細閱讀。類似的問題在這裏存在[http://stackoverflow.com/q/10008377/682495](http://stackoverflow.com/q/10008377/682495)。 – 2012-04-27 11:10:12

+0

儘管問題記者談論'Modality',那麼形式就是關於main-sub窗口ie。界面關係。但代碼執行繼續'label.setText(「我不阻止!」);' – 2012-04-27 11:13:58