我有一个 ordersFXML ,它有一个tableview( ordersTable )。当您点击弹出另一个包含 payButton 的 paymentsFXML (付款)的按钮时。点击 payButton 后,paymentFXML会关闭。 我的问题在这里。 我希望在点击payButton后清除ordersTable,清空。
有什么办法吗? 以下是我的代码。
OrdersFXMLController.java
@FXML
private TableView<Orders> tableOrders;
@FXML
public void clearAll(){
tableOrders.setItems(null);
}
PaymentsFXMLController.java
@FXML
private void finilizePayment(ActionEvent event){
// some code here
closeButtonAction();
}
@FXML
private void closeButtonAction(){
FXMLLoader loader = new FXMLLoader();
OrdersFXMLController orderController = (OrdersFXMLController)loader.getController();
orderController.clearAll();
}
并且,这是错误代码:
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
提前致谢。
答案 0 :(得分:0)
总有办法;事实上,你有几个不同的选择。
由于您没有发布任何代码,我将对此答案做出一些假设,并提供可能的概念,而不一定是最好的方法;这完全取决于您如何实施数据模型等。
一种方法是在ordersFXML
控制器(我将其称为ordersController
)中包含一个公共方法,允许您清除paymentsController
类中的表格:
public void clearOrdersTable() {
tableOrders.setItems(null);
}
执行此操作后,您需要在调用其构造函数时将ordersController
的引用传递给paymentsController
类。如果从ordersController
类创建控制器:
PaymentsController paymentsController = new PaymentsController(this);
此时,您可以通过ordersController
访问paymentsController
,并设置了一种方法,可用于清除{{1}中的订单列表}}。现在您只需在处理付款后调用该方法:
TableView
同样,做出了一些假设。如果您使用实际的基础列表(您应该使用)填充您的订单表,则应清除该列表,而不是将表的项目设置为ordersController.clearOrdersTable();
。
但是,如果没有看到您的代码,这可能对您不起作用,但希望能为您自己的故障排除提供良好的起点。
为了进一步阅读并帮助自己掌握在不同控制器之间传递价值观的概念,请查看jewelsea对此问题的出色答案:Passing Parameters JavaFX FXML。