2016-08-13 6 views
0

Wenn ich button1 drücke, ändert sich meine Szene nicht, und es heißt, dass gedrückt wurde. Warum ist das?Warum reagiert meine Taste in Javafx seltsam

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

public class Main extends Application { 

    Stage window; 
    Button button, button2; 
    Scene scene, scene2; 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     window = primaryStage; 
     window.setTitle("title"); 

     // label 1 
     Label label1 = new Label("This is scene 1"); 

     // button 1 
     button = new Button("Go to scene 2"); 
     button.setOnAction(e -> { 
      window.setScene(scene2); 
      System.out.println("button 1 pressed"); 
     }); 

     // layout 1 
     StackPane layout = new StackPane(); 
     layout.getChildren().addAll(label1, button); 
     scene = new Scene(layout, 200, 500); 

     // label 2 
     Label label2 = new Label("This is scene 2"); 

     // button 2 
     button2 = new Button("go to scene 1"); 
     button.setOnAction(e -> { 
      window.setScene(scene); 
      System.out.println("button 2 pressed"); 
     }); 

     // layout 2 
     StackPane layout2 = new StackPane(); 
     layout2.getChildren().addAll(label2, button2); 
     scene2 = new Scene(layout2, 200, 500); 

     window.setScene(scene); 
     window.show(); 

    } 
} 
+0

Nur 2 hinzufügen: Statt das 'onAction' Handler der ersten Schaltfläche zu ändern, die eine für die zweite Taste eingestellt:' button2.setOnAction (e -> { window.setScene (Szene); System.out. println ("Taste 2 gedrückt"); }); ' – fabian

+0

@fabian Wenn' button2' gedrückt wird, ändern Sie die Szene in 'Szene' und drucken Sie 'Taste2 gedrückt'. Ist das nicht was gesagt wird? Ich möchte, dass der Button1 mich zu Szene 2 bringt und ich möchte, dass Button2 mich zu scene1 bringt. –

+0

Sie rufen 'button.setOnAction' auf, möchten aber selbst zum zweiten Mal einen' onAction' -Handler setzen. – fabian

Antwort

1

Wenn Sie Taste definieren 2, Ihr 'setOnAction' ist für Knopf (nicht BUTTON2). Um es richtig funktionieren zu lassen, ändern Sie button.setOnAction für button2 in button2.setOnAction. Dann wird es funktionieren.

Einige Hinweise, die Ihnen in Zukunft helfen können: wenn Sie Ihr Programm debuggen, anstatt einen Haltepunkt bei window.setScene (scene2) auszuführen und zu setzen; und ein weiterer bei window.setScene (Szene); dann hätten Sie festgestellt, dass die Ausführung bei Drücken von button bei window.setScene (scene) stoppt;

Mit anderen Worten, der falsche Aktionshandler wurde aufgerufen, wenn button1 gedrückt wurde. Und da ist deine Antwort.

Auch wenn Sie versuchen, zwei Szenen wie diese zu testen, unterscheiden Sie sich von den anderen, z. scene1 = neue Szene (Layout, 200, 500); und scene2 = neue Szene (Layout, 500, 200); Auf diese Weise ist es offensichtlicher, auf welche Sie schauen.

Verwandte Themen