每当我尝试调用
goToPage
方法时,都会收到以下异常。在使用控制器之前,我只是使用该方法的类调用非静态 setTextField
方法,但我想确保文本字段正确填充,并且我被告知要使用控制器来正确执行此操作。
如有任何帮助,我们将不胜感激!
java.lang.ClassCastException: class com.example.randomOtherController cannot be cast to class com.example.fooController(com.example.randomOtherController and com.example.fooController are in module com.example of loader 'app')
public void goToPage(ActionEvent event) throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("foo.fxml"));
loader.load();
FooController fooController = loader.getController();
fooController.setTextFieldText(part);
// Now redirect
// Parent root = FXMLLoader.load(getClass().getResource("foo.fxml"));
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
Parent scene = loader.getRoot();
stage.setScene(new Scene(scene));
stage.showAndWait();
}
public void setTextFieldText(Part part) {
foo1TextField = new TextField();
foo2TextField = new TextField();
foo3extField = new TextField();
foo4TextField = new TextField();
foo5TextField = new TextField();
foo6TextField = new TextField();
foo1TextField .setText(part.getName());
foo2TextField .setText(String.valueOf(part.getMax()));
foo3extField .setText(String.valueOf(part.getMin()));
foo4TextField .setText(String.valueOf(part.getId()));
foo5TextField .setText(String.valueOf(part.getPrice()));
foo6TextField .setText(String.valueOf(part.getStock()));
}
我尝试使用它自己的类和现在的控制器来调用
setTextFieldText
方法。如果我单独使用该方法,则不会填充任何文本字段,如果我使用此代码中所示的控制器,则会出现上述异常。
你好钱德勒·加里,
要解决使用控制器重定向时填充 JavaFX TextField 的问题,您需要确保 FXML 文件和控制器正确链接。 以下是包含代码示例的详细解决方案:
1。 FXML 文件('foo.fxml'):
确保 fx:controller 属性设置为您的 FooController 类,并且 TextField 具有与控制器中的字段匹配的 fx:id。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.FooController">
<TextField fx:id="foo1TextField" />
</VBox>
2。控制器类('FooController.java'):
定义控制器类并确保 TextField 正确初始化。
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
public class FooController {
@FXML
private TextField foo1TextField;
@FXML
public void initialize() {
// Initialization if needed
}
public void setTextFieldText(String text) {
foo1TextField.setText(text);
}
}
3.重定向逻辑:
加载 FXML 并使用控制器在 TextField 中设置文本。
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class SampleApp {
public void redirectToFoo(Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/path/to/foo.fxml"));
Parent root = loader.load();
FooController controller = loader.getController();
controller.setTextFieldText("Hello, World!");
stage.setScene(new Scene(root));
stage.show();
}
}
希望这有帮助。