2016-08-13 10 views
0

button1を押すと、私のシーンは変わらず、button2が押されたと表示されます。どうしてこれなの?なぜ私のボタンがJavafxで変わってしまうのですか

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

2を追加するだけで、最初のボタンのonActionハンドラを変更する代わりに、2番目のボタンのハンドラを設定します: 'button2.setOnAction(e - > { window.setScene(scene); System.out。 – fabian

+0

@ fabian 'button2'を押すと、シーンを' scene'に変更し、 'button 2 pressed'を表示します。println(" button 2 pressed "); })これは何を言っているのではないのですか?私は、button1が私をシーン2に連れて欲しく、button2が私をシーン1に連れて欲しいと思っています。 –

+0

しかし、 'onAction'ハンドラを2回目に設定したい場合でも' button.setOnAction'を呼び出します。 – fabian

答えて

1

ボタン2を定義すると、 'setOnAction'はボタン(ボタン2ではなく)用です。したがって、正しく動作するようにするには、button2をbutton2.setOnActionに変更するbutton.setOnActionを変更します。その後、それは動作します。

将来的に役立つポインタ:window.setScene(scene2)でブレークポイントを実行して設定するのではなく、プログラムをデバッグする場合。もう1つはwindow.setScene(scene)にあります。ボタンを押すと、window.setScene(scene)で実行が停止することがわかりました。

つまり、button1を押したときに間違ったアクションハンドラが呼び出されました。あなたの答えがあります。

また、このような2つのシーンをテストしようとしている場合は、もう一方を別のものにします。シーン1 =新しいシーン(レイアウト、200,500);シーン2 =新しいシーン(レイアウト、500,200)。そうすれば、どちらがあなたが見ているのかがより明白になります。

関連する問題