Ich baue eine JavaFX-Anwendung mit einem TableView, und ich möchte es dynamisch abhängig von verschiedenen Benutzerauswahlen ändern. Ich kann es anfänglich mit farbigen Daten füllen, aber beim Aktualisieren werden die ursprünglichen Farben beibehalten.JavaFX erfrischend dynamisch farbige Tabellenansicht
Dies ist die grundlegende Funktionalität meiner Methode, die der Benutzer etwas ändert sich dynamisch jedes Mal aufgerufen wird:
SessionsTableView.getItems().clear();
ObservableList<SessionItem> newsessionitems = FXCollections.observableArrayList();
for (SessionPart x : AllSessionParts) {
tableitems.add(new SessionItem(count, x.name, x.getdurationasString(true, 150.0), getambiencetext(x), x.goals_getCurrentAsString(true, 150.0)));
newsessionitems.add(x);
count++;
}
SessionsTableView.setItems(newsessionitems);
Methoden verschiedene String-Werte zurück, die in der Zelle Wert Fabrik getestet Farbe zu bestimmen:
DurationColumn.setCellFactory(new Callback<TableColumn<SessionItem, String>, TableCell<SessionItem, String>>() {
@Override
public TableCell<SessionItem, String> call(TableColumn<SessionItem, String> param) {
return new TableCell<SessionItem, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (! isEmpty()) {
switch (item) {
case "No Duration Set":
setTextFill(Color.RED);
break;
case "Short Duration Set":
setTextFill(Color.YELLOW);
break;
default:
setTextFill(Color.BLACK);
break;
}
setText(item);
}
}
};
}
});
JavaFX färbt den Text basierend auf den String-Werten, die beim ersten Auffüllen angegeben wurden, nicht jedoch beim erneuten Aufruf. Mein Override der Methode updatestitem (String, boolean) wird aufgerufen, und die Textwerte werden geändert, aber die Farben selbst des geänderten Texts werden nicht aktualisiert/aktualisiert.
Wie bekomme ich die Farben dynamisch ändern?
Scheint wie sollte das funktionieren (nicht verwandt, aber Ihre Zelle sollte den Text löschen ('setText (null)') wenn 'isEmpty()' ist wahr). Sie haben angegeben, dass Sie überprüft haben, dass die Methode 'updateItem (...)' aufgerufen wird und das Element geändert wird. Können Sie überprüfen, ob es eine der 'case'-Anweisungen eingibt? –
Ich stimme zu, es sollte funktionieren. Java ist nicht meine erste Sprache und JavaFX ist nicht meine erste GUI, mit der ich gebaut habe, also lerne ich immer noch. Aus irgendeinem Grund funktioniert es immer noch nicht. Ich habe einen setText (null) hinzugefügt, wenn isEmpty() ist und die case-Anweisungen eingibt, während ich einen zu überprüfenden String hinzufüge und jeden der verschiedenen Fälle korrekt eingibt, und zwar den Text, aber nicht die Farbe. – caleb
Wahrscheinlich müssen Sie dann Ihre Frage bearbeiten [MCVE] (Schwerpunkt auf * minimal * und * vervollständigen *). Normalerweise verwende ich dafür einen CSS-Ansatz, aber es gibt keinen offensichtlichen Grund, warum dieser Ansatz nicht funktioniert. –