javaFX 在for循环中执行代码,使tableview单行依次实时刷新更新数据的解决方案
来源:互联网 发布:网络精准投放 编辑:程序博客网 时间:2024/05/20 16:11
1.解决Javafx 在非UI线程中更新UI数据的操作需要用到Task
2.解决Javafx 实时更新数据,需要监听,使用callback
原先我的Atie工具执行批量case测试,只能全部执行完刷新tableview,现在可以执行一条自动刷新一条了,完整代码参考码云
关键代码如下:
@FXMLTableColumn<TableModel, Label> tableResponse;@FXMLTableColumn<TableModel, Label> tableResult;
tableResult.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<TableModel, Label>, ObservableValue<Label>>() { @Override public ObservableValue<Label> call(CellDataFeatures<TableModel, Label> param) { String val = "Empty"; if (param != null && param.getValue() != null) { val = param.getValue().getResult(); } final Label label = new Label(val); try { label.setText(param.getValue().getResult()); param.getValue().ResultProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue,String newValue) {Platform.runLater(() -> label.setText(newValue)); }}); } catch (Exception e) { e.printStackTrace(); } return new SimpleObjectProperty<Label>(label);}});tableResponse.setCellValueFactory( new Callback<TableColumn.CellDataFeatures<TableModel, Label>, ObservableValue<Label>>() { @Override public ObservableValue<Label> call(CellDataFeatures<TableModel, Label> param) { String val = "Empty"; if (param != null && param.getValue() != null) { val = param.getValue().getResponse(); } final Label label = new Label(val); try { label.setText(param.getValue().getResponse()); param.getValue().ResponseProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { System.out.println(CurrentTime() + " ObservableValue222; " + newValue); Platform.runLater(() -> label.setText("-->" + newValue)); } }); } catch (Exception e) { e.printStackTrace(); } return new SimpleObjectProperty<Label>(label); } });
@FXMLpublic void testAll() throws InterruptedException { Task<Void> progressTask = new Task<Void>() { @Override protected Void call() throws Exception { for (int i = 0; i < CasesTable.getItems().size(); i++) { casename = lt.get(i).CasenameProperty().getValue(); at = lt.get(i).ATCommandProperty().getValue(); expe = lt.get(i).ExpectionProperty().getValue(); sendAT(at); lt.get(i).setResponse(resp); System.out.println(CurrentTime() + " sendAT(at); " + at); if (resp.trim().endsWith("OK")) { lt.get(i).setResult("pass"); } else { lt.get(i).setResult("fail"); } Thread.sleep(500); resp = ""; } return null; } }; th = new Thread(progressTask); th.start(); }
现在执行,对应的 response和result就会自动一行行的刷新
阅读全文
0 0
- javaFX 在for循环中执行代码,使tableview单行依次实时刷新更新数据的解决方案
- flex 4.0 解决在MODULE中使用timer实时刷新数据,卸载MODULE后还在执行的问题
- flex 4.0 解决在MODULE中使用timer实时刷新数据,卸载MODULE后还在执行的问题
- JavaFx中ListView的数据更新
- tableView 刷新单行
- 在典型的多层实现中,创建和刷新DataSet对象并依次更新原始数据的步骤
- ios tableView那些事 (十八) UITableView单行刷新数据
- ios tableView那些事 (十八) UITableView单行刷新数据
- MFC For循环中实时更新显示Edit内容
- TableView中row的数据更新
- IOS中TableView更新数据的步骤
- JavaFx中TableView 的列中的数据进行自定义显示的问题
- 实时交易系统中参数实时更新解决方案
- return的用法是什么?若用在for循环中,还会执行下一次循环吗?
- 创建和刷新 DataSet 并依次更新原始数据的步骤
- 创建和刷新 DataSet 并依次更新原始数据的步骤
- UITableView刷新单行数据的方法
- UITableView刷新单行数据的方法
- 单向链表
- php二维码生成的方法
- hadoop 2.7 遇到的问题
- 利用Mysql实现高并发红包
- #pragma 预处理指令详解
- javaFX 在for循环中执行代码,使tableview单行依次实时刷新更新数据的解决方案
- AVL树c语言实现
- 怎么注册DLL到注册表
- JAVA相关文章(9)
- UML学习(二)——类图
- 5月15日云栖精选夜读:重要通知_|_比特币勒索席卷全球_如何防范?
- 顺序栈
- 看完让你彻底搞懂Websocket原理
- RK3288把debug口从uart2修改为uart3步骤