面对使用JavaFX,FXMLLoader,fxml

时间:2016-04-17 02:54:58

标签: javafx fxml

因此,当我执行代码时,我没有遇到任何错误。 我在我的fxml中也有设置控制器,我在下面发布的代码是控制器和主类。因为我已经在上一篇文章中发布了fxml。

package realEstateApplication;

import javafx.application.Application;
//import javafx.fxml.FXMLLoader;
//import javafx.scene.Parent;
//import javafx.scene.Scene;
import javafx.stage.Stage;
import realEstateApplication.controllers.loginViewController;

public class Main extends Application {

public Main() {
    System.out.println("Main invoked ... \n");
}

@Override
public void start(Stage primaryStage) throws Exception{
   // Parent loginRoot = FXMLLoader.load(getClass().getResource("views/loginView.fxml"));
    loginViewController loginMVC =  new loginViewController();

   // Parent login = FXMLLoader.load(getClass().getResource("views/loginView.fxml"));

   /* Parent admin = FXMLLoader.load(getClass().getResource("views/adminView.fxml"));
    Parent registerAdmin = FXMLLoader.load(getClass().getResource("views/registerAdminView.fxml"));
    Parent registerCustomer = FXMLLoader.load(getClass().getResource("views/registerCustomerView.fxml"));
    Parent registerCompany = FXMLLoader.load(getClass().getResource("views/registerCompanyView.fxml"));
    Parent registerFlat    = FXMLLoader.load(getClass().getResource("views/registerFlatView.fxml"));*/

   // Stage firstStage = new Stage();
   // firstStage.setTitle("Login");
   // firstStage.setScene(new Scene(loginRoot, 600, 400));
    //firstStage.show();

    /*Stage secondaryStage = new Stage();
    secondaryStage.setTitle("Administrator");
    secondaryStage.setScene(new Scene(admin, 600, 399));
    secondaryStage.show();

    Stage ternaryStage = new Stage();
    ternaryStage.setTitle("For new admins");
    ternaryStage.setScene(new Scene(registerAdmin, 600, 400));
    ternaryStage.show();

    Stage forthStage = new Stage();
    forthStage.setTitle("New customers register here");
    forthStage.setScene(new Scene(registerCustomer, 600, 400));
    forthStage.show();

    Stage pentaStage = new Stage();
    pentaStage.setTitle("Register new company here");
    pentaStage.setScene(new Scene(registerCompany, 600, 400));
    pentaStage.show();

    Stage hexaStage = new Stage();
    hexaStage.setTitle("Create flats here");
    hexaStage.setScene(new Scene(registerFlat, 600, 400));
    hexaStage.show();*/

}


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

}

下面我已经包含了我的控制器代码:

package realEstateApplication.controllers;

import javafx.fxml.FXML;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Modality;
import javafx.stage.Stage;


/**
 * Created by PriteshJ on 4/16/16.
 */
public class loginViewController extends Application {
    @FXML private TextField username_tField;
    @FXML private PasswordField password_tField;
    @FXML private Button login_Button;
    @FXML private Button signUp_Button;


    public loginViewController() {
        System.out.println("Login Controller constructor invoked ...\n");
    }

    @Override
    public void start(Stage loginStage) throws Exception {
        Parent loginRoot = FXMLLoader.load(getClass().getResource("views/loginView.fxml"));
        if(loginRoot == null)
            System.out.println("something weird happened .... ");
        loginStage.setTitle("Login");
        loginStage.setScene(new Scene(loginRoot, 600, 400));
        loginStage.initModality(Modality.WINDOW_MODAL);
        loginStage.show();
    }

}

(所以我尝试传递一个对Parent变量的引用,该变量指向我的fxml文件,这个文件在start方法的范围内,因为我的Main类扩展了Application(javafx),这给了我NullPointerException。 试图让它静止,但也没有用。 然后尝试了我现在发布的方法,它没有给出任何错误,但它都不起作用。)

我正在尝试从JavaFX中的MVC角度思考。所以我得到了一个loginViewController,我依靠它完全拥有login.fxml并对其进行任何操作。我有一个JavaFX应用程序启动的主类,但它只能从我的viewController的对象构造我的视图。我经历了很多例子,但到目前为止,我从来没有遇到过一个例子,它展示了如何做我想做的事情。

期待建议。

0 个答案:

没有答案