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