如何使用控制器在重定向时填充 JavaFX 文本字段

问题描述 投票:0回答:1

每当我尝试调用

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
方法。如果我单独使用该方法,则不会填充任何文本字段,如果我使用此代码中所示的控制器,则会出现上述异常。

java javafx javafx-8
1个回答
0
投票

你好钱德勒·加里,

要解决使用控制器重定向时填充 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();
    }
}

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.