2013-06-29 3 views
0

Я создал этот пример вкладок, которые я хочу закрыть после отображения диалогового окна подтверждения, и нажмите кнопку Yes.Закрыть вкладку после подтверждения диалогового окна

public static Tab testconfirmTabClose(Tab tab) 
    { 

     tab.setOnClosed(new EventHandler<Event>() 
     { 
      @Override 
      public void handle(Event t) 
      { 
       t.consume(); 
       // Dialog Stage init 
       final Stage dialog = new Stage(); 
       dialog.initModality(Modality.APPLICATION_MODAL); 

       Button btnYes = new Button("Yes"); 

       btnYes.setOnAction(new EventHandler<ActionEvent>() 
       { 
        @Override 
        public void handle(ActionEvent event) 
        { 
         dialog.close(); 
        } 
       }); 

       Button btnNo = new Button("No"); 

       btnNo.setOnAction(new EventHandler<ActionEvent>() 
       { 
        @Override 
        public void handle(ActionEvent event) 
        { 
         dialog.close(); 
        } 
       }); 

       // Layout for the Button 
       HBox hbox = new HBox(); 
       hbox.setSpacing(10); 
       hbox.setAlignment(Pos.CENTER); 
       hbox.getChildren().add(btnYes); 
       hbox.getChildren().add(btnNo); 

       // Layout for the Label and hBox 
       VBox vbox = new VBox(); 
       vbox.setAlignment(Pos.CENTER); 
       vbox.setSpacing(10); 

       // Text 
       Text tc = new Text(); 
       tc.setText("Do you want to quit?"); 

       // Layout for the Button 
       HBox thbox = new HBox(); 
       thbox.setSpacing(10); 
       thbox.setPadding(new Insets(20, 20, 20, 90)); // Place the dialog text right 
       thbox.setAlignment(Pos.CENTER_LEFT); 
       thbox.getChildren().add(tc); 

       BorderPane bp = new BorderPane(); 

       bp.setPadding(new Insets(15, 15, 10, 15)); 
       bp.setTop(null); 
       bp.setLeft(vbox); 
       bp.setCenter(thbox); 
       bp.setRight(null); 
       bp.setBottom(hbox); 

       Scene scene = new Scene(bp, 500, 140); 
       dialog.setScene(scene); 
       dialog.show(); 
      } 
     }); 

     return tab; 
    } 

У меня есть эта проблема: когда я нажимаю на вкладку, чтобы закрыть ее, вкладка закрывается и отображается диалоговое окно подтверждения. Я не могу «заморозить» вкладку для ответа пользователя. Можете ли вы рассказать мне, как я могу решить эту проблему?

ответ

1

Я боюсь, что в JavaFX 2.2 нет чистого способа сделать это. JavaFX 8 (вероятно) предложит метод с именем Tab#setOnCloseRequest(...), который будет делать то, что вы хотите. Для 2.2 единственный способ, который я вижу сейчас, - это вытащить источник из OpenJDK и создать собственную адаптированную реализацию TabPane - извините: - /.

+0

есть ли другой «EventHandler», который я могу использовать ti, получить тот же эффект в JavaFX 2.2? Например, вызывающий Dialog, когда я нажимаю на 'X' и вызывается close() на активной вкладке? – user1285928

+0

Я взломал эту поддержку в 2.2, см. Https://git.eclipse.org/c/efxclipse/org.eclipse.efxclipse.git/tree/bundles/runtime/org.eclipse.fx.e4.controls.fx2/ SRC/орг/затмение/FX/е4/контроль/FX2 – tomsontom