2017-06-26 5 views
0

JavaFXでシーンを切り替えようとしています。これまでの3つのシーン、つまりログイン画面、プロファイル、登録を作成しました。何らかの理由で私はログイン画面からプロフィールに切り替えることができません。ログイン画面の「登録」ボタンと登録画面の「戻る」ボタンが機能しています。 「ログイン」ボタンをクリックすると何も起こりません。私は何が欠けていますか?ここではメインクラスです:JavaFXのシーンが変化しない

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import jedzenie.windows.LogInScreen; 
import jedzenie.windows.ProfileInfoScreen; 
import jedzenie.windows.RegisterScreen; 


public class App extends Application 
{ 

    Stage stage; 
    Scene scene, scLogIn; 
    LogInScreen logInScreen; 
    RegisterScreen regis; 
    ProfileInfoScreen profileScreen; 

    @Override 
    public void start(Stage primaryStage){ 
     primaryStage.setTitle("FoodCalc"); 
     stage = primaryStage; 


     logInScreen = new LogInScreen(this); 
     scLogIn = new Scene(logInScreen, 400, 400); 
     scLogIn.getStylesheets().add(getClass().getResource("logInScreen.css").toExternalForm()); 
     primaryStage.setScene(scLogIn); 

     primaryStage.show(); 

    } 


    public void moveToRegisterScreen(){ 
     regis = new RegisterScreen(this); 
     Scene scRegister = new Scene(regis, 575, 250); 
     scRegister.getStylesheets().add(getClass().getResource("registerScreen.css").toExternalForm()); 
     stage.setScene(scRegister); 
    } 


    public void logOut(){ 
     stage.setScene(scLogIn); 
    } 


    public void logIn(){ 
     profileScreen = new ProfileInfoScreen(this); 
     Scene scProfile = new Scene(profileScreen, 500, 400); 
     scProfile.getStylesheets().add(getClass().getResource("registerScreen.css").toExternalForm()); 
     stage.setScene(scProfile); 

    } 


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


} 

LogInScreenクラス:

import javafx.event.ActionEvent; 
import javafx.geometry.HPos; 
import javafx.geometry.Pos; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.PasswordField; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.GridPane; 
import jedzenie.app.App; 

public class LogInScreen extends GridPane { 

App main; 

public LogInScreen(App main){ 
    this.main = main; 

    setAlignment(Pos.CENTER); 
    //setGridLinesVisible(true); 

    setVgap(15); 
    setHgap(10); 

    Label welc = new Label("Welcome to FoodCalc. Please log in or register."); 
    add(welc, 0, 0, 2, 1); 

    Label lbUser = new Label("Username: "); 
    add(lbUser, 0, 1); 
    TextField tfUser = new TextField(); 
    add(tfUser, 1, 1); 

    Label lbPass = new Label("Password: "); 
    add(lbPass, 0, 2); 
    PasswordField pfPass = new PasswordField(); 
    add(pfPass, 1, 2); 

    Button logIn = new Button("Log in"); 
    add(logIn, 1, 3); 
    setHalignment(logIn, HPos.RIGHT); 
    logIn.setOnAction((ActionEvent e) -> { 
     main.logIn(); 
    }); 

    Button register = new Button("Register"); 
    add(register, 1, 4); 
    setHalignment(register, HPos.CENTER); 
    register.setOnAction((ActionEvent e) -> { 
     main.moveToRegisterScreen(); 
    }); 


} 



} 

そしてRegisterScreenクラス:

import javafx.event.ActionEvent; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.scene.control.Button; 
import javafx.scene.control.ComboBox; 
import javafx.scene.control.Label; 
import javafx.scene.control.PasswordField; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.HBox; 
import jedzenie.app.App; 

public class RegisterScreen extends BorderPane { 

    App main; 
    Button register; 
    ComboBox age; 
    PasswordField pfPass, pfConfPass; 

    public RegisterScreen(App main){ 
     this.main = main; 
     setCenter(gridPane()); 
     setBottom(hbox()); 
     setPadding(new Insets(25,25,25,25)); 
    } 

    GridPane gridPane() { 
     GridPane gp = new GridPane(); 

     gp.setGridLinesVisible(true); 
     gp.setVgap(15); 
     gp.setHgap(10); 
     gp.setAlignment(Pos.CENTER); 

     Label lbUser = new Label("Username: "); 
     gp.add(lbUser, 0, 1); 
     TextField tfUser = new TextField(); 
     gp.add(tfUser, 1, 1); 

     Label lbPass = new Label("Password: "); 
     gp.add(lbPass, 0, 2); 
     pfPass = new PasswordField(); 
     gp.add(pfPass, 1, 2); 

     Label lbConfPass = new Label("Confirm Password: "); 
     gp.add(lbConfPass, 0, 3); 
     pfConfPass = new PasswordField(); 
     gp.add(pfConfPass, 1, 3); 

     Label lbEmail = new Label("Email: "); 
     gp.add(lbEmail, 0, 4); 
     TextField tfEmail = new TextField(); 
     gp.add(tfEmail, 1, 4); 

     Label lbSex = new Label("Sex: "); 
     gp.add(lbSex, 2, 1); 
     ComboBox cbSex = new ComboBox(); 
     gp.add(cbSex, 3, 1); 

     Label lbAge = new Label("Age: "); 
     gp.add(lbAge, 2, 2); 
     ComboBox cbAge = new ComboBox(); 
     gp.add(cbAge, 3, 2); 

     Label lbWeight = new Label("Weight: "); 
     gp.add(lbWeight, 2, 3); 
     TextField tfWeight = new TextField(); 
     gp.add(tfWeight, 3, 3); 

     return gp; 
    } 

    HBox hbox(){ 
     HBox hbox = new HBox(10); 


     Button back = new Button("Back"); 
     hbox.getChildren().add(back); 
     back.setOnAction((ActionEvent e) ->{ 
      main.logOut(); 
     }); 

     Button register = new Button("Register"); 
     hbox.getChildren().add(register); 


     return hbox; 
    } 


} 

私はあまりにも方法とそれらの間の差を検索しようとしてきました作業中の実装と動作しない実装。まだ理由を見つけることができません。

編集:申し訳ありませんが、私はProfileInfoScreenクラスを置いていません。ここにあります:

import javafx.event.ActionEvent; 
import javafx.geometry.Insets; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.VBox; 
import jedzenie.app.App; 

public class ProfileInfoScreen extends BorderPane { 

    App main; 
    Insets ins = new Insets(10,10,10,10); 

    public ProfileInfoScreen(App main){ 
     this.main = main; 
     setPadding(ins); 
     setTop(lbWelcome); 
     setLeft(vbox()); 

    } 

    Label lbWelcome = new Label("Welcome, " + "XXXXXXXXXXX"); 

    VBox vbox(){ 

    VBox vbox = new VBox(); 
    vbox.setSpacing(10); 
    vbox.setPadding(ins); 

    Button btWeight = new Button("Change weight"); 
    vbox.getChildren().add(btWeight); 
    btWeight.setOnAction((ActionEvent e) -> { 
     //XXXXXXXXXX 

    }); 

    return vbox; 

    } 
} 
+0

「ProfileInfoScreen」のソースはどこですか? –

+0

私は(本質的には空白の) 'ProfileInfoScreen'クラスを作成し、あなたのコードは正常に動作しました。おそらくその問題はそのクラスにあります。例外はありますか? –

+0

'ProfileInfoScreen'でもうまく動作します。 –

答えて

0

私はあなたのコードを試したところ、うまくいきました。登録ボタンをクリックすると、ユーザー名、パスワード、性別、年齢、メールフィールドの表が表示されます。 空のprofileScreenを作成したので、ログインをクリックすると空白のウィンドウが表示されます。私は問題を見ません。 すべてのインポートがjavafxパッケージから行われていることを確認してください。 テストするには、別のIDEを試してみてください(私はIntellijで試しました)。

私は十分な評判がないのでコメントできませんでしたので、ここに書きました。

+0

私はそれを解決しました - 問題は、プログラムを実行するとき私の無知でした。私はpom.xmlファイルで何かをしなければならなかったので、私はpom.xmlファイルのエラーを無視しました。私はEclipse IDEを使用していて、前のバージョンのプログラムを実行しているように見えますが、pom.xmlファイルで問題を修正した後に作業を開始しました。あなたの答えをありがとう、私はそれが他の人のために働いていることを見た後、多くの助けた。 –

0

私はこの質問が回答されていることを知っていますが、stage.setScene行の後にstage.showがコードに含まれていないといくつか問題が発生する可能性があります。

関連する問題