从 JavaFX 中的非控制器 class 方法调用控制器 class 方法,组合框填充
Calling a controller class method from a non-controller class method in JavaFX, combobox population
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");
}
}
这是获取用户信息以填充组合框的代码部分。它在非控制器 class 中声明和定义。代码正确获取用户信息,然后将其传递给控制器 class.The 中定义的名为 "loadUserBox" 的方法,代码会一直运行,直到需要将详细信息传递给控制器 class 方法。它不会失败,但不会填充组合框。我是否错误地调用了控制器方法?请帮忙解释谢谢。我正在使用场景生成器、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 已经在同一个控制器中声明 class 我指的是
这里存在三个问题
首先,您的 FXMLLoader
(loader
) 没有调用 load()
方法,因此实际上没有加载任何内容。我不确定这是否丢失,因为您正在尝试复制一小部分原始代码。
其次,您调用了 loader.setController(loader)
,这有效地使 FXMLLoader
成为控制器。请注意,您在调用 wandShopController.loaduserBox()
.
后没有使用 wandShopController
这就是您需要的:
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 应用程序。我不太确定你是怎么做到的,但这对我来说绝对是个问题。
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");
}
}
这是获取用户信息以填充组合框的代码部分。它在非控制器 class 中声明和定义。代码正确获取用户信息,然后将其传递给控制器 class.The 中定义的名为 "loadUserBox" 的方法,代码会一直运行,直到需要将详细信息传递给控制器 class 方法。它不会失败,但不会填充组合框。我是否错误地调用了控制器方法?请帮忙解释谢谢。我正在使用场景生成器、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 已经在同一个控制器中声明 class 我指的是
这里存在三个问题
首先,您的 FXMLLoader
(loader
) 没有调用 load()
方法,因此实际上没有加载任何内容。我不确定这是否丢失,因为您正在尝试复制一小部分原始代码。
其次,您调用了 loader.setController(loader)
,这有效地使 FXMLLoader
成为控制器。请注意,您在调用 wandShopController.loaduserBox()
.
wandShopController
这就是您需要的:
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 应用程序。我不太确定你是怎么做到的,但这对我来说绝对是个问题。