javafx - 通过单击其他 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
提前致谢。
解决方案
总会有办法的; 事实上,你有几个不同的选择。
由于您没有发布任何代码,因此我将对此答案做出一些假设,并仅提供可能的概念,不一定是最好的方法;这一切都取决于您如何实现数据模型等。
一种方法是在您的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。
推荐阅读
- ios - iOS ARKit 如何将 ARFrame .capturedImage 保存到文件中?
- javascript - Vue 多个组件在一个包/文件中
- javascript - 使用 ReactJS 中的 Navigator.Clipboard API 从 Firestore 复制到剪贴板
- python - 在 python pandas 中打印交叉表
- css - 当内容调整为 @media 规则时,next.js 容器溢出的问题
- java - Java Threads isInterrupted(),为什么没有出现这个输出
- java - 在将它们添加到数组之前检查用户输入了多少数据点以避免索引超出范围异常
- javascript - 在电子生成器反应电子应用程序后,在 Windows 中出现黑屏
- html - 页脚比 div 好吗?
- firebase - 用颤振将数据发送到firebase