JavaFX TableView属性绑定在另一个线程中

时间:2019-01-30 14:28:39

标签: multithreading javafx properties binding tableview

我有一个可用于SQLite和JDBC的程序。 这就是我为TableView policyTable获取List <>的方式:

class GetAllPoliciesTask extends Task {

@Override
public ObservableList<Policy> call()  {
    return FXCollections.observableArrayList
            (Datasource.getInstance().queryPoliciesForMainTable());
}

这就是我将它与TableView连接的方式:

@FXML
public void getPolicies(){
    Task<ObservableList<Policy>> task = new GetAllPoliciesTask();
    policyTable.itemsProperty().bind(task.valueProperty());
    Thread thread = new Thread(task);
    thread.start();
}

一切正常,但是我想添加一些功能-从数据源加载数据并与TableView绑定后,我想在TableView中选择最后选择的行。这就是问题开始的地方。我无法访问TableView。我尝试使用join(),但无济于事:

private int selectedPolicyIndex = -1;

@FXML
public void getPolicies(){
    Task<ObservableList<Policy>> task = new GetAllPoliciesTask();
    policyTable.itemsProperty().bind(task.valueProperty());
    Thread thread = new Thread(task);
    thread.start();
    try {
        thread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    if(selectedPolicyIndex >= 0){
        policyTable.getSelectionModel().select(selectedPolicyIndex);
    }
}

像TableView被“锁定”或正在进行中。你能帮我吗?

0 个答案:

没有答案