首页 > 解决方案 > 通过单击其他 fxml 中的按钮清除 tableview

问题描述

我有一个ordersFXML ,它有一个表格视图(ordersTable)。当您单击一个按钮时,会弹出另一个包含 payButton 的paymentFXML ( payments ) 。单击payButton后付款FXML 关闭。我的问题就在这里。我希望清除订单表,并在单击 payButton 后立即清空。

有什么办法吗?下面是我的代码。

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

提前致谢。

标签: javafxtableview

解决方案


总会有办法的; 事实上,你有几个不同的选择。

由于您没有发布任何代码,因此我将对此答案做出一些假设,并仅提供可能的概念,不一定是最好的方法;这一切都取决于您如何实现数据模型等。

一种方法是在您的ordersFXML控制器中包含一个公共方法(我将其称为ordersController),该方法允许您从paymentsController类中清除表:

public void clearOrdersTable() {
    tableOrders.setItems(null);
}

完成此操作后,您需要在调用其构造函数时将引用传递ordersController给您的类。如果从您的类paymentsController创建控制器:ordersController

PaymentsController paymentsController = new PaymentsController(this);

此时,您可以访问您ordersController的,paymentsController并且您已经设置了一种可用于清除TableView. 现在您只需要在处理完付款后调用该方法:

ordersController.clearOrdersTable();

再次,做了一些假设。如果您使用实际的基础列表(您应该是)填充您的订单表,您应该清除该列表而不是将表的项目设置为null.

但是,如果没有看到您的代码,这可能对您不起作用,但希望能为您自己的故障排除提供一个良好的起点。

要进一步阅读并帮助自己掌握在不同控制器之间传递值的概念,请查看 Jewelsea 对这个问题的出色回答:传递参数 JavaFX FXML


推荐阅读