我在JavaFX中创建了这个GUI
Java FX TableView http://image.prntscr.com/image/7b207d4f7b064d8fa8c827e295a8035e.png
问题在于,当我尝试运行readList
函数时,之后表中没有显示任何内容,但是,如果我尝试使用某些内容进行过滤,则会显示数据。
我做错了什么? SortedList是否链接到Filtered,链接到正在观看人员列表的ObservableCollection?
每当我更改该列表中的内容时,都不应自动更新TableView
那是控制器
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);
}
}
答案 0 :(得分:1)
SortedList是否链接到与ObservableCollection链接的Filtered
是和是(虽然没有ObservableCollection
,但 ObservableList
)
正在观看人员名单?
没有
ObservableList
未查看传递给FXCollections.observableList
的列表,它会创建由ObservableList
支持的List
。修改后备列表不会通知添加到ObservableList
的侦听器; ObservableList
只使用支持列表来存储它的元素。 FilteredList
依赖于听众。
这意味着:不要使用写访问访问支持列表。改为修改ObservableList
:
observablePerson.addAll(model.readList(txtUser.getText(), txtPass.getText()));
此外,如果您初始化字段并且从不修改它,则不需要if (persons== null)
检查。同样简单地替换该字段将导致ObservableList
由与该字段中存储的列表不同的列表支持...