为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2021-11-24 15:47:31
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");    }}这是获取用户信息以填充组合框的代码部分。它是在非控制器类中声明和定义的。代码获取用户信息没问题,然后将其传递给控制器类中定义的名为“loadUserBox”的方法。代码一直工作,直到需要将详细信息传递给控制器类方法。它不会失败,但只是不会填充组合框。我是否错误地调用了控制器方法?请帮忙解释谢谢。我正在使用场景构建器、JavaFX、FXMLpublic 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);    }//这部分代码接收信息来填充组合框。组合框已经在我所指的同一个控制器类中声明
查看完整描述

1 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

这里存在三个问题。


首先,您的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),但稍后它变成了带有 GUI 的 JavaFX 应用程序。我不太确定你是如何做到这一点的,但这对我来说绝对是个问题。


查看完整回答
反对 回复 2021-11-24
  • 1 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信