changement de cellule javafx tablecolumn
Je cherche à définir la colonne de cellule pour recevoir un cercle d'objet en remplacement de la valeur provenant d'une base de données dans une observableList. Les valeurs sont remplies dans cette colonne qui reflètent l'autre colonne (disons col A et B (de gauche à droite) - ils contiennent essentiellement les mêmes informations sauf - Je voulais que col B change pour représenter l'objet cercle.Voici mon code jusqu'à présent, veuillez conseiller si vous avez des suggestions.
status.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, Circle>, ObservableValue<Circle>>() {
@Override
public ObservableValue<Circle> call(TableColumn.CellDataFeatures<ObservableList, Circle> param) {
String c = (String) param.getValue().get(2); //getting all data in column 2 of the row
System.out.println(c);
switch(c){
case "High":
circle.setFill(Color.GREEN);
healthstatus.setStyle( "-fx-alignment: CENTER;");
break;
case "Medium":
circle.setFill(Color.YELLOW);
healthstatus.setStyle( "-fx-alignment: CENTER;");
break;
case "Low":
circle.setFill(Color.RED);
healthstatus.setStyle( "-fx-alignment: CENTER;");
break;
default:
circle.setFill(Color.BLUEVIOLET);
}
return new SimpleObjectProperty(circle);
}
});
Je préfère continuer avec le code que j'ai sans avoir à créer une classe en réponse à la définition de la valeur.
J'ai joint une photo pour montrer mon résultat jusqu'à présent.
Merci d'avance! Image
1 answers
Je voudrais vous suggérons d'utiliser
cellFactory()
au lieu decellValueFactory()
. Parce quecellValueFactory()
traite de l'affichage des éléments dans les cellules. Contrairement à,cellFactory()
traite de la personnalisation des propriétés des cellules. Vérifiez cette démonstration,
Callback<TableColumn<Person, String>, TableCell<Person, String>> circle_cell_factory = (final TableColumn<Person, String> param) -> {
final TableCell<Person, String> circle_cell = new TableCell<Person, String>()
{
final Circle circle = new Circle(6);
@Override
public void updateItem( String item, boolean empty )
{
super.updateItem( item, empty );
if(!empty) {
switch(param.getCellData(getIndex())) {
case "High":
circle.setFill(Color.GREEN);
healthstatus.setStyle( "-fx-alignment: CENTER;");
break;
case "Medium":
circle.setFill(Color.YELLOW);
healthstatus.setStyle( "-fx-alignment: CENTER;");
break;
case "Low":
circle.setFill(Color.RED);
healthstatus.setStyle( "-fx-alignment: CENTER;");
break;
default:
circle.setFill(Color.BLUEVIOLET);
}
}
setGraphic(circle);
}
}
};
return circle_cell;
};
, Puis ajoutez
circle_cell_factory
à votre colonne.
status.setCellFactory(circle_cell_factory);
Sortie: