Ich habe eine Klasse mit ein paar Werten (ListItem
), und ich möchte eine Liste dieser Elemente anzeigen (ListView<ListItem>
). ListItem
hat eine value
Eigenschaft, die ich gerne die ListView<ListItem>
als Text anzeigen würde, aber ansonsten sollte die Liste aussehen und normal funktionieren, insbesondere in Bezug auf Artikelauswahl. Ich habe den folgenden Code, um dies zu erreichen. FXML wird aus Faulheit weggelassen, es ist nur ein <ListView />
.JavaFX ListView CellFactory deaktiviert die Objektauswahl
// Controller for FXML
public class MainController {
// Wrapper class containing several values
private class ListItem {
private String value;
public ListItem(String value) {
this.value = value;
}
public String getValue() {
return value;
}
... // Other useful stuff
}
@FXML private ListView<ListItem> list;
@FXML
public void initialize() {
// Set list to display using the given CellFactory
list.setCellFactory((list) -> {
return new ListCell<ListItem>() {
@Override
protected void updateItem(ListItem item, boolean empty) {
if (empty) return;
// Display item's value property
setText(item.getValue());
}
};
});
// Add test data
list.getItems().add(new ListItem("test"));
list.getItems().add(new ListItem("test2"));
// Print when selection changes
list.getSelectionModel().selectedItemProperty().addListener((evt) -> {
System.out.println("Selection changed!");
});
}
}
Dies zeigt die ListItem
richtig, in jedem Punkt des ListView
seine value
Eigenschaft. Es bricht jedoch die Auswahl, und die System.out.println(...)
wird nicht ausgeführt (das Element auch nicht nicht Highlight in der GUI). Ich habe entdeckt, dass das Entfernen der list.setCellFactory(...)
Aussage der Schuldige ist, aber bringt mich in eine schwierige Lage.
Wenn list.setCellFactory(...)
vorhanden ist, verwendet das Element den richtig Text, aber nicht ausgewählt werden. Wenn list.setCellFactory(...)
nicht vorhanden ist, verwendet das Element den falschen Text, aber kann ausgewählt werden. Gibt es noch etwas besonderes, das ich tun muss, um den Text korrekt anzuzeigen und den Artikel auswählen?
Ich habe die Voraussetzung Googeln gemacht, aber ich konnte niemand anderes mit diesem speziellen Problem finden. Jede Hilfe wird sehr geschätzt.
Neben James_D Antwort es eine gute Idee ist, alle Änderungen rückgängig zu machen getan die Zelle, wenn ein Gegenstand entfernt wird. Andernfalls erhalten Sie Probleme wie diese: http://stackoverflow.com/q/38483552/2991525. Setzen Sie den 'text' für leere Zellen auf' null' oder '" '. – fabian