从JavaFX中的非控制器类方法调用控制器类方法,组合框填充

时间:2018-10-18 01:24:41

标签: java javafx combobox fxml fxmlloader

public static void loadUser(String txtFieldName, String txtFeildPassword) throws FileNotFoundException {
    File file = new File( "C:\\Users\\obiak\\Documents\\fall 2018\\application Programming\\JavaFX Workspace"
            + "\\obp937-lab5\\src\\main\\resources\\data\\users.csv" );

    Scanner scan = new Scanner(file);
    ArrayList<User> user = new ArrayList<>();
    while( scan.hasNextLine() ) {

        String line = scan.nextLine();
        String [] token = line.split(",");
        String name = token[0];
        String pass = token[1];
        String wood = token[2];
        String core = token[3];
        String length = token[4];// remember to change file back to 8.5 and ammend constructors also
        String quality = token[5];

        User newUser = new User(name, pass, wood, core, length, quality);
        user.add(newUser);

    }
    scan.close();
    System.out.println("I am here now");


    System.out.println("Right");
    for(int  i=0; i<user.size(); i++) {
        if ( txtFieldName.equals(user.get(i).getName()) && txtFeildPassword.equals(user.get(i).getName()) ) {

        WandShopController wandShopController = new WandShopController();
        FXMLLoader loader = new FXMLLoader( );
        loader.setLocation(WandShopController.class.getResource("Scene1FXML.fxml"));
        loader.setController(loader);
        wandShopController.loaduserBox(user.get(i).getWood(), user.get(i).getCore(), user.get(i).getLength(),user.get(i).getQuality());
        System.out.println("Still working");
        }

        System.out.println(" good job");
    }

}

这是代码的一部分,可获取用户信息以填充组合框。它是在NON-controler类中声明和定义的。代码将正确获取用户信息,然后将其传递给控制器​​类中定义的名为“ loadUserBox”的方法。代码将一直工作到需要将详细信息传递给控制器​​类方法为止。它不会失败,但不会填充comboBox。我是否错误地调用了控制器方法?请帮助解释谢谢。我正在使用场景构建器,JavaFX,FXML

public void loaduserBox(String wood, String core, String length, String quality) {
        ObservableList<String> list = FXCollections.observableArrayList( wood, core, length, quality); 
        System.out.println("Whats wrong");
        woodBox.getItems().clear();
        woodBox.getItems().addAll(list);
    }

///这部分代码接收信息以填充comboBox。 comboBox已经在我要引用的同一控制器类中声明了

1 个答案:

答案 0 :(得分:0)

这里有三个问题。

首先,您的FXMLLoaderloader)不会调用load()方法,因此实际上未加载任何内容。我不确定这是否丢失,因为您正在尝试复制一小部分原始代码。

第二,您调用了loader.setController(loader),实际上使FXMLLoader成为了控制器。请注意,您在致电wandShopController之后没有使用wandShopController.loaduserBox()

这就是您所需要的:

WandShopController wandShopController = new WandShopController();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(WandShopController.class.getResource("Scene1FXML.fxml"));
loader.setController(wandShopController); // Set the correct controller
loader.load(); // You probably need to store the root node, depending on what you are trying to do
wandShopController.loaduserBox(user.get(i).getWood(), user.get(i).getCore(), user.get(i).getLength(),user.get(i).getQuality());

最后,似乎您正在加载控制台应用程序(因此使用Scanner),但随后它成为带有GUI的JavaFX应用程序。我不太确定您是如何做到的,但这对我来说肯定是一个问题。