我有三个 Controller ,一个包含在 View 之间切换的 Boderpane 组件 CrechHome
,另一个有一个按钮,我的代码驻留在 EnfantController
,另一个 Controller 需要该按钮来引导我 PaymentController
我需要该按钮在我所在的场景中执行某些操作,然后显示另一个 View (Payment
),因为我正在加载我的 CrechHome
Controller ,所以我可以让 borderPane 实例切换到另一个 View ,但以下内容不执行任何操作(我仍然处于与之前相同的 View 中)并且没有显示错误。
代码如下:
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 新手,所以所有帮助将不胜感激。
最佳答案
您还没有真正提供足够的信息来对此提供确定的答案,但是如果您正在加载分别以 CrecheController
和 EnfantController
作为 Controller 的 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());
如果您不能像这样直接执行此操作,则类似的解决方案也将起作用。
关于java - 从另一个 Controller 类设置 boderpane 中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46542764/