2017-09-23 9 views
1

Je souhaite créer un nouveau bouton en cliquant sur Exister le bouton d'origine comme indiqué ci-dessous. Maintenant, j'espère que le nouveau bouton aura la même fonction que le bouton actuel. Lorsque je clique sur le nouveau bouton, il créera également un nouveau bouton. Si le bouton d'origine a plus de fonctions, le nouveau bouton peut également avoir ces fonctions.Fonction de copie javafx du nœud actuel vers un autre nœud

Button btn = new Button("Original Button"); 

    VBox root = new VBox(); 
    root.getChildren().add(btn); 

    btn.setOnMouseClicked(e->{ 
     root.getChildren().add(new Button("New button")); 
    }); 
+2

Il n'y a pas moyen de faire contourner ce problème en copiant chaque gestionnaire d'événements unique, par exemple 'Button oldButton = (Bouton) e.getSource(); Button newButton = nouveau bouton (...); newButton.setOnMouseClicked (oldButton.getOnMouseClicked()); '. Cependant, les gestionnaires d'événements ajoutés en utilisant 'addEventHandler' ne peuvent pas être énumérés (du moins pas sans accéder aux membres privés via la réflexion). BTW: Notez que l'événement 'onAction' est généralement utilisé pour les boutons au lieu de' onMouseClicked', car l'ancien événement est également déclenché en appuyant sur Entrée lorsque le bouton est mis au point. – fabian

Répondre

1

code de suggestions @fabian:

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

/** 
* 
* @author Sedrick 
*/ 
public class JavaFXApplication11 extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     VBox vbox = new VBox(); 

     Button btn = new Button(); 
     btn.setText("Say 'Hello World'"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 
       Button oldButton = (Button)event.getSource();     
       Button newButton = new Button("new Button"); 
       vbox.getChildren().add(newButton); 
       newButton.setOnAction(oldButton.getOnAction());    
      } 
     }); 


     vbox.getChildren().add(btn); 

     StackPane root = new StackPane(); 
     root.getChildren().add(vbox); 

     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

}