gpt4 book ai didi

java - TableView 在过滤之前不显示数据

转载 作者:行者123 更新时间:2023-12-01 09:52:33 25 4
gpt4 key购买 nike

我在 JavaFX 中创建了这个 GUI

Java FX TableView

问题是,当我尝试运行 readList 函数时,表中不会显示任何内容,但是,如果我尝试使用某些内容进行过滤,则会出现数据。

我做错了什么? SortedList 是否没有链接到 Filtered,而 Filtered 又链接到正在监视人员列表的 ObservableCollection?每当我更改列表中的某些内容时,不应该自动更新 TableView 吗?

这就是 Controller

public class LetturaAwpController {

List<Person> persons= new LinkedList<Person>();

ObservableList<Person> observablePerson = FXCollections.observableList(persons);

@FXML
private TextField txtUser;

@FXML
private TextField txtPass;

@FXML
private TextField txtFiltraId;

@FXML
private CheckBox chkMag;

@FXML
private TableView<Person> tblMain;

@FXML
private TableColumn<Person, String> colId;

@FXML
void doRead(ActionEvent event) {

if(txtPass.getText().isEmpty() | txtUser.getText().length() < 6)
return;
if (persons== null)
persons= model.readList(txtUser.getText(), txtPass.getText());
else
persons.addAll(model.readList(txtUser.getText(), txtPass.getText()));
}

@FXML
void initialize() {

FilteredList<Person> filteredPerson= new FilteredList<>(observablePerson , p-> true);

colId.setCellValueFactory(new PropertyValueFactory<Person,String>("idApparecchio"));

txtFiltraId.textProperty().addListener((observable, oldValue, newValue)-> {
filteredSlot.setPredicate(person-> {
if (newValue == null || newValue.isEmpty()){
return true;
}

String lowerCaseFilter = newValue.toLowerCase();

if(person.getIdApparecchio().toLowerCase().contains(lowerCaseFilter)){
return true;
} else if (person.getNomeModello().toLowerCase().contains(lowerCaseFilter)){
return true;
}
return false;
});
});

SortedList<Person> sortedData = new SortedList<>(filteredPerson);

// 4. Bind the SortedList comparator to the TableView comparator.
sortedData.comparatorProperty().bind(tblMain.comparatorProperty());

// 5. Add sorted (and filtered) data to the table.
tblMain.setItems(sortedData);

}

}

最佳答案

Isn't the SortedList linked to the Filtered that is linked to the ObservableCollection

是的,是的(虽然没有ObservableCollection,但它是ObservableList)

that is watching the persons list?

没有

ObservableList 没有监视传递给 FXCollections.observableList 的列表,它创建一个由 List 支持的 ObservableList。修改后备列表不会通知添加到 ObservableList 的监听器; ObservableList 仅使用后备列表来存储其元素。然而,FilteredList 依赖于监听器。

这意味着:不要通过写访问来访问后备列表。改为修改 ObservableList:

observablePerson.addAll(model.readList(txtUser.getText(), txtPass.getText()));

此外,如果您初始化该字段并且从不修改它,则不需要 if (persons== null) 检查。另外,简单地替换该字段将导致 ObservableList 由与该字段中存储的列表不同的列表支持......

关于java - TableView 在过滤之前不显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37515605/

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