Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从另一个控制器类设置boderpane中心_Java_Model View Controller_Javafx - Fatal编程技术网

Java 从另一个控制器类设置boderpane中心

Java 从另一个控制器类设置boderpane中心,java,model-view-controller,javafx,Java,Model View Controller,Javafx,我有三个控制器,一个用于保存在视图之间切换的Boderpane组件CrechHome,另一个用于保存代码的按钮EnfantController,我需要那个按钮来引导我PaymentController我需要那个按钮在我所在的场景中做一些事情,然后显示另一个视图(Payment),因为我正在加载我的CrechHome控制器,这样我就可以让borderPane实例切换到另一个视图,但是下面的操作没有任何作用(我仍然处于与以前相同的视图中)并且没有显示错误 代码如下: public class Enf

我有三个控制器,一个用于保存在视图之间切换的Boderpane组件
CrechHome
,另一个用于保存代码的按钮
EnfantController
,我需要那个按钮来引导我
PaymentController
我需要那个按钮在我所在的场景中做一些事情,然后显示另一个视图(
Payment
),因为我正在加载我的
CrechHome
控制器,这样我就可以让borderPane实例切换到另一个视图,但是下面的操作没有任何作用(我仍然处于与以前相同的视图中)并且没有显示错误

代码如下:

public class EnfantController implements Initializable {
    @FXML
    private Button payement;

    @FXML
    private void payementEnf(ActionEvent event) throws IOException {
        // get the crechHomeController to get the borderPane
        FXMLLoader loader2 = new FXMLLoader();
        loader2.setLocation(getClass().getResource("/Views/CrechHome.fxml"));
        Node node2 = loader2.load();
        CrechHomeController crechController = loader2.getController();
        // get the paymentController to get the payment view
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("/Views/Payment.fxml"));
        Node node = loader.load();

        PaymentController paymentController = loader.getController();
        paymentController.reload();
        paymentController.getRecherche().getSelectionModel().selectLast();

        crechController.getBorderPane().setCenter(node);
    }
}

我意识到我可能没有为
CrechHomeController
获得正确的控制器实例,这就是为什么我没有得到任何东西,但是如果这是错误的,你怎么解决这个问题呢?我也是一个Javafx新手,所以我们非常感谢所有的帮助。

你没有提供足够的信息来确定答案,但是如果您正在加载FXML文件,其中
CrecheController
EnfantController
分别作为其控制器,您可以在同一位置执行类似操作

public class CrecheController {

    @FXML
    private BorderPane borderPane ;

    public ObjectProperty<Node> displayedViewProperty() {
        return borderPane.centerProperty();
    }

    // ...
}

如果您不能像这样直接执行此操作,类似的解决方案也会起作用。

您还没有提供足够的信息来确定答案,但是如果您正在加载FXML文件,这些文件的控制器分别为
CrecheController
EnfantController
,您可以在同一位置执行一些操作像这样的事情,

public class CrecheController {

    @FXML
    private BorderPane borderPane ;

    public ObjectProperty<Node> displayedViewProperty() {
        return borderPane.centerProperty();
    }

    // ...
}

如果您不能像这样直接执行此操作,类似的解决方案也会起作用。

您可以尝试将CrechHomeController设置为singleton类,那么只有一个instance@IREmon在JavaFX中如何实现这一点?因为JavaFX中的控制器不需要任何构造函数来实例化,所以我需要加载视图以et控制器很奇怪,我怎么能在javaFx中为控制器创建一个有用的单例类呢?@GherbiHicham你真的不能使控制器成为单例,原因有很多。在代码的某个地方,你加载
CrechHome.fxml
并显示生成的UI。你需要从该获取控制器实例de>FXMLLoader。您还没有发布这样的代码,我们也不知道该代码与您发布的代码之间的关系,因此很难给出完整的答案。看看您是否可以创建一个。也许有帮助,或者尝试在start方法中加载@James\u D这样的搜索,因为这是我在teh中看到的第一件事应用程序。您可以尝试将CrechHomeController设置为singleton类,然后将只有一个instance@IREmon在JavaFX中如何实现这一点?由于JavaFX中的控制器不需要任何构造函数来实例化,因此我需要加载视图以获取控制器这一事实很奇怪,我如何创建一个有用的单例c考虑到这一点,在javaFx中为控制器创建一个类?@gherbichicham由于许多原因,你真的不能使控制器成为单例。在你的代码中的某个地方,你加载
CrechHome.fxml
并显示生成的UI。你需要从
fxmloader
中获取控制器实例。你还没有发布这样做的代码,并且我不知道该代码与您发布的代码之间的关系,因此很难给出完整的答案。看看您是否可以创建一个。也许有帮助,或者尝试在start方法中加载@James_D之类的搜索,因为这是我在应用程序中看到的第一件事。
FXMLLoader crecheLoader = new FXMLLoader(getClass().getResource("/Views/CrechHome.fxml"));
Parent crecheView = crecheLoader.load();
CrecheController crecheController = crecheLoader.getController();

FXMLLoader enfantLoader = new FXMLLoader(getClass().getResource("/Views/EnfantHome.fxml"));
Parent enfantView = enfantLoader.load();
EnfantController enfantController = enfantLoader().getController();

enfantLoader.nodeProperty().bindBidirectional(crecheController.displayedViewProperty());