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

Author: Shekhar Rai, 2017-03-08

1 answers

Je voudrais vous suggérons d'utiliser cellFactory() au lieu de cellValueFactory(). Parce que cellValueFactory() 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:

entrez la description de l'image ici

 -1
Author: Shekhar Rai, 2018-07-18 19:23:45