我有三个控制器,一个用于保存我在视图之间切换的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
获取正确的Controller实例,而且为什么我没有得到任何东西,但如果这是什么,你怎么解决这个问题呢?是错的,我也是Javafx的新手,所以所有的帮助都将受到赞赏。
答案 0 :(得分:0)
您还没有真正提供足够的信息来提供确切的答案,但是如果您要加载分别在其CrecheController
和EnfantController
作为控制器的FXML文件,则在同一个地方你可以做这样的事情;
public class CrecheController {
@FXML
private BorderPane borderPane ;
public ObjectProperty<Node> displayedViewProperty() {
return borderPane.centerProperty();
}
// ...
}
public class EnfantController {
private final ObjectProperty<Node> node = new SimpleObjectProperty<>();
public ObjectProperty<Node> nodeProperty() {
return node ;
}
@FXML
private void payementEnf(ActionEvent event) throws IOException {
// 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();
this.node.set(node);
}
// ...
}
然后当你加载两个FXML文件时,只需
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());
如果您不能直接这样做,那么类似的解决方案将起作用。