2012-04-27 4 views
0

Я кодирую программу javafx, и мне нужно создать и использовать свое собственное диалоговое окно Stage (Javafx.Stage) для отображения сообщений и подтверждений. Я уже написал весь необходимый код, но у меня есть проблема:Создание диалогового окна JavaFX

Диалоговое окно должно прекратить выполнение остальной части кода до тех пор, пока не будет дано ответ «да» или «нет» или «повторить попытку». Когда я использую свое диалоговое окно, например «DialogBox.ShowMessage», появляется сцена с сообщением и кнопками. Но, как вы думаете, остальная часть кода продолжает выполняться. Как я могу обойти это? Когда я создаю сцену, он должен останавливать другие потоки или поток, от которых он зависит. Я искал через Интернет и здесь, но я не могу найти точное решение. Одна идея заключается в использовании «javafx.event.EventDispatcher» или «javafx.event.EventDispatchChain», но я не мог понять, как их использовать. И другая идея использует «java.awt.EventQueue». И вот что может помочь: у меня есть контроль над сценой и скрыть события, показывая или скрывая обработчики событий. Я думаю, что некоторая очередь потоков может использоваться в одном из этих spesific-разделов.

Надеюсь, я уточнил ситуацию достаточно. Вкратце, ı необходимо управлять потоками при использовании другого этапа с моим собственным кодом.

спасибо.

ответ

1

О выполнении приостановления есть вопрос Jira для него http://javafx-jira.kenai.com/browse/RT-19783.
Как обходной путь, я понятия не имею, как использовать EventDispatcher и EventDispatchChain для решения этой проблемы, но вы можете отправить параметр EventHandler в качестве параметра. Например,

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. 
}); 

Я согласен с этим является своего рода, однако «намотка» путь.
Siteye hoş geldin ve kolay gelsin.

+0

Спасибо за отзыв. Позвольте мне еще раз объяснить ваш ответ. В приведенной ссылке примера подчеркивается мода приложения, которую я уже сделал. Этот пример блокирует интерфейс НЕ КОД. Это моя проблема. Я использую это дважды, и появляется второе сообщение, не ожидая закрытия первого. Другими словами, второй этап показывается до закрытия первого этапа. Насколько я понимаю, рекомендация обработчика событий - это нормально или отменить действие кнопки. я уже сделал это. Я вызываю окно, он блокирует интерфейс, но НЕ КОД. Teşekkürler. –

+0

Приложенный пример репортера ** ** - о блокировке исполнения (кода) после отображения подэтапа. Подумайте, внимательно прочитайте это. Подобный вопрос существует здесь [http://stackoverflow.com/q/10008377/682495](http://stackoverflow.com/q/10008377/682495). –

+0

Несмотря на то, что репортер проблем говорит о «модальности», там модальность - это просто главное окно, т.е. интерфейса. Но выполнение кода продолжается с помощью 'label.setText (« Я не блокирую! »);' –