Ich bin die unten Zelle Fabrik auf eine Spalte anwenden.Tabelle Zelle Combobox - Aktion nicht durchgeführt
targetEnviroment.setCellFactory(new Callback<TableColumn<DevWorkTabBench, String>, TableCell<DevWorkTabBench, String>>() {
@Override
public TableCell<DevWorkTabBench, String> call(TableColumn<DevWorkTabBench, String> param) {
TableCell<DevWorkTabBench, String> cell = new TableCell<DevWorkTabBench, String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
String status = null;
try {
status = getTableView().getItems().get(getIndex()).getObjectStatus();
} catch (IndexOutOfBoundsException ex) {
status = "";
}
if (status.equalsIgnoreCase("ReadyForDeployment")) {
ComboBox<String> comboBox = new ComboBox(environmentList);
comboBox.valueProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
commitEdit(newValue);
}
});
comboBox.setOnShown(new EventHandler<Event>() {
@Override
public void handle(Event event) {
getTableView().edit(getIndex(), getTableColumn());
getTableView().getSelectionModel().select(getIndex());
}
});
comboBox.setValue(item);
setGraphic(comboBox);
} else {
setGraphic(null);
}
if (empty) {
setGraphic(null);
}
}
};
return cell;
}
});
Als ich die status
auf den erwähnten Status zu ändern, habe ich den Blick von ComboBox
in dieser bestimmten Zelle, aber die Drop-down nicht auftritt. Auch nach mehreren Klicks scheint keine Aktion auf dem combobox
ausgeführt zu werden. Außer dem gehandhabten bekomme ich keine Ausnahme. Andere Spalten können bearbeitet werden und führen die Aufgabe wie erwartet aus.
Ich habe keine Ahnung, was hier falsch ist. Kann mir bitte jemand helfen.
Danke @James_D. Es hat mein Problem behoben. Aber ich kann immer noch nicht verstehen, warum es die Sache verfälscht hat, die Zelle editierbar zu machen. Ich benutze die gleiche Logik auch an anderen Orten (wie in einer 'treetableview'). Auch das gleiche Stück Code arbeitet in einem System, aber an jedem anderen Ort. Dort gibt die gleiche Logik die gewünschte Ausgabe, aber nicht hier. Wie kann es zwei verschiedene Ergebnisse geben? –
Meine Annahme ist, dass der Aufruf von 'edit()' zum Aufruf von 'updateItem()' führt. Dann ersetzen Sie die Grafik durch ein neues Kombinationsfeld (dessen Popup nicht angezeigt wird). I.e. Sobald der Benutzer das Popup anzeigt, ersetzen Sie das Kombinationsfeld. Das ist aber eine Vermutung ... Die Lektion aus der Implementierung von 'CheckBoxTableCell' scheint zu sein, dass für" live "Editierzellen, dh Zellen, in denen die Grafik immer angezeigt wird (was ich mit Kombinationsfeldern besser finde), sollten Sie nicht gehe überhaupt nicht in den Bearbeitungszustand. –
Sie könnten vielleicht mit '' updateItem() 'wie' if (isEditing()) {comboBox.show();} 'mit Logik experimentieren, aber es scheint ein sehr zerbrechlicher Weg zu sein. –