2017-09-23 2 views
1

Ich möchte eine neue Schaltfläche erstellen, indem Sie auf die ursprüngliche Schaltfläche klicken, wie im folgenden Code angezeigt wird. Jetzt hoffe ich, dass die neue Taste dieselbe Funktion wie die aktuelle Taste hat. Wenn ich auf die neue Schaltfläche klicke, wird auch eine neue Schaltfläche erstellt. Wenn Original-Taste mehr Funktionen haben, und neue Taste kann auch diese Funktionen haben.javafx kopiere Funktion des aktuellen Knotens auf einen anderen Knoten

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

Es gibt keine Möglichkeit, dies zu tun um durch jeden einzelnen Event-Handler zu kopieren, zum Beispiel 'Button oldButton = (Button) e.getSource(); Schaltfläche newButton = new Schaltfläche (...); newButton.setOnMouseClicked (oldButton.getOnMouseClicked()); '. Event-Handler, die mit 'addEventHandler' hinzugefügt wurden, können jedoch nicht aufgelistet werden (zumindest nicht ohne Zugriff auf private Member über Reflektion). Übrigens: Beachten Sie, dass das 'onAction'-Ereignis normalerweise für Schaltflächen anstelle von 'onMouseClicked' verwendet wird, da das vorherige Ereignis auch beim Drücken der Eingabetaste ausgelöst wird, wenn die Schaltfläche aktiviert ist. – fabian

Antwort

1

-Code von @fabian Vorschläge:

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

} 
Verwandte Themen