Вызов метода класса контроллера из неконтроллерного метода класса в JavaFX, заполнение списка - PullRequest
0 голосов
/ 18 октября 2018
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");
    }

}

это часть кода, которая получает информацию о пользователе для заполнения Combobox.он объявлен и определен в неконтроллерном классе.код получает информацию о пользователе в порядке, а затем передает ее в метод с именем «loadUserBox», определенный в классе контроллера. Код работает до тех пор, пока ему не потребуется передать детали в метод класса контроллера.Это не ошибка, но она не заполняет поле со списком.Я неправильно называю метод контроллера?пожалуйста помогите с объяснениями спасибо.И я использую конструктор сцен, 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 голосов
/ 18 октября 2018

Здесь есть три проблемы.

Во-первых, ваш FXMLLoader (loader) не вызывает метод 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), но позже оно становится приложением JavaFX с графическим интерфейсом.Я не совсем уверен, как тебе удалось это сделать, но это определенно выглядит для меня проблемой.

...