创建JavaFX对话框

时间:2012-04-27 09:08:39

标签: multithreading javafx dialog

我正在编写一个javafx程序,我需要创建并使用我自己的基于Stage(Javafx.Stage)的对话框来显示消息和确认。我已经写了所有必要的代码,但我有一个问题:

对话框必须停止执行其余代码,直到给出响应为“是”或“否”或“重试”。当我使用像“DialogBox.ShowMessage”这样的对话框时,会出现一个带有消息和按钮的舞台。但是,正如您所想,其余代码将继续执行。我怎么能绕过这个?当我创建阶段时,它必须停止其他线程或它所依赖的线程。我通过互联网和这里搜索,但我找不到确切的解决方案。一个想法是使用“javafx.event.EventDispatcher”或“javafx.event.EventDispatchChain”,但我无法弄清楚如何使用它们。另一个想法是使用“java.awt.EventQueue”。这里有一些可以提供帮助的东西:我可以控制舞台表演和隐藏事件以及显示或隐藏事件处理程序。我认为som类型的线程队列可以在其中一个特定部分中使用。

我希望我能够充分澄清情况。简而言之,我需要在使用我自己的代码使用另一个阶段时管理线程。

谢谢。

1 个答案:

答案 0 :(得分: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şgeldinve kolay gelsin。