2013-06-29 8 views
0

J'ai créé cet exemple d'onglets que je souhaite fermer après avoir affiché la boîte de dialogue de confirmation et j'ai cliqué sur le bouton Yes.Fermer l'onglet après confirmation de la boîte de dialogue

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

Je possède ce numéro: Lorsque je clique sur l'onglet pour fermer l'onglet est fermé et le dialogue de confirmation est affiché. Je ne peux pas "geler" l'onglet pour la réponse de l'utilisateur. Pouvez-vous me dire comment je peux résoudre ce problème?

Répondre

1

Je crains qu'il n'y ait pas de moyen propre de faire cela dans JavaFX 2.2. JavaFX 8 proposera (probablement) une méthode appelée Tab#setOnCloseRequest(...) qui fera ce que vous voulez. Pour 2.2, la seule façon dont je vois maintenant est de tirer la source d'OpenJDK et de créer votre propre implémentation de TabPane adaptée - désolé: - /.

+0

Y at-il un autre 'EventHandler' que je peux utiliser pour obtenir le même effet dans JavaFX 2.2? Par exemple en appelant Dialog quand je clique sur le 'X' et en appelant close() sur l'onglet actif? – user1285928

+0

J'ai piraté ce support en 2.2 voir https://git.eclipse.org/c/efxclipse/org.eclipse.efxclipse.git/tree/bundles/runtime/org.eclipse.fx.e4.controls.fx2/ src/org/éclipse/fx/e4/contrôles/fx2 – tomsontom

Questions connexes