gpt4 book ai didi

java - 当我更改模型时更新 JavaFX 表

转载 作者:行者123 更新时间:2023-12-02 12:06:08 27 4
gpt4 key购买 nike

我正在使用由渲染器对象的 ObservableList 支持的 TableView,其设置如下:

private ObservableList<Renderer> renderers = FXCollections.observableArrayList();

@FXML
private TableView<Renderer> renderersTable;
@FXML
private TableColumn<Renderer, String> nameColumn;
@FXML
private TableColumn<Renderer, Boolean> approvedColumn;

@FXML
private void initialize() {
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
approvedColumn.setCellValueFactory(new PropertyValueFactory<>("approved"));
renderersTable.setItems(renderers);
}

渲染器对象非常简单,如下所示:

@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class Renderer extends Model {
private String name;
private boolean approved;
// ...
}

我有一个通过按下按钮从 UI 调用的函数,其中包含以下内容:

@FXML
private void approveSelectedRenderers() {
List<Renderer> selectedRenderers = new ArrayList<>();
selectedRenderers.addAll(renderersTable.getSelectionModel().getSelectedItems());

for (Renderer renderer : selectedRenderers) {
renderer.setApproved(true);
renderers.set(renderers.indexOf(renderer), renderer);
Thread.sleep(3000); // Simulate slowly talking to the network.
}
}

我原本希望每 3 秒看到一次对每行进行批准的更改,但相反,它会执行所有行,并且只有在此之后才会更新 UI。这是为什么?如何更新 UI?

最佳答案

看来您的所有渲染都发生在 FX 线程上。这将阻止您的 UI,直到所有处理完成然后才会更新。

要查看长时间运行的进程 - 使用任务或服务,并在其更新回调中更新 UI。

您还可以使用 Platform.runLater() 从后台运行的线程回发到 UI 线程。

关于java - 当我更改模型时更新 JavaFX 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46898536/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com