6
votes

Javafx TableView avec éditeur ColorPicker

J'ai une vue de table qui utilise un ColorPicker pour (afficher / éditer) des couleurs dans une cellule. Le tableau affiche le ColorPicker dans le champ souhaité, mais les modifications ne fonctionnent pas. xxx

Le gestionnaire d'événements d'édition n'est pas appelé lorsque je change la couleur dans le sélecteur de couleur, des idées?


2 commentaires

Avez-vous réussi à résoudre votre problème?


Non, je n'ai pas été parmi un projet avec une utilisation à la fois Swing / Javafx et cette partie a finalement été résolue à l'aide d'une balançoire, car d'autres problèmes nous empêchent d'utiliser Javafx


4 Réponses :


1
votes

Eh bien, j'ai enquêté sur ce sujet un peu comme j'ai eu le même problème. J'ai peur de dire que JavaFx est juste inutilisable.

J'ai examiné comment les autres ont mis en œuvre leurs cellules et que la clé était tout ce qui utilisait quelque chose qui est représentable par une chaîne. Maintenant, c'est la façon dont il est toujours avec Java: faites-le le Java-Way ou être laissé seul sous la pluie. Les docs pour Javafx sont extrêmement mauvais pour le moment, alors je devais essayer jusqu'à ce qu'il fonctionne.

SO: Pour déclencher le EditCommit -Event, vous devez appeler setContentDisplay (contentdisplay. Text_only) dans upmateItem () . Cela fonctionne bien si vous souhaitez afficher vos données sous forme de chaîne, mais échoue complètement dans des cas comme ceux-ci, où un ColorPicker fait juste le travail.

Alternativement, il pourrait être possible de déclencher l'événement manuellement. Mais comment obtenez-vous la position de la table? Je ne sais pas.


1 commentaires

Commiter () ne déclenche pas cet événement car la vision de la table n'était pas en mode édition. Ce mode d'édition Obtenir est démarré par votre code car vous devez double-cliquer dans la cellule en question. Que votre sélecteur de couleurs est affiché ... cela fonctionne peut-être, mais votre couleur n'est pas affichée lors de la modification d'une cellule.



1
votes

J'ai eu le même problème pour CheckboXtablecell et DatePickertablecell et ColorPickertablecells: - (

Je le traite comme ça: sur les événements des contrôles, je récupère les objets Pojo utilisés par " (((((((entrées) getTableView (). GetItems (). Obtenez (gettablerow (). getIndex () "et je mette à jour le similaire comme est-ce fait dans la méthode oneitCommit ...

Donc, pour moi. ceci (mise à jour de la couleur): xxx

Voici l'exemple avec ColorPickerCell : xxx

avec ce simple pojo de JavaFx simple: xxx

Je ne sais pas si c'est un bon moyen de faire la bonne façon de faire ça, mais Cela a fonctionné pour moi ... Notez que le pojo de Javafx n'est accessible que dans une requête «ActionEvent» (Combobox, DatePicker, ColorPicker, etc.)

Cordialement,


0 commentaires

2
votes

Il n'est pas nécessaire d'accéder directement au Javafx Pojo (ou Javafx Bean) directement si ses propriétés sont correctement liées à la table et que cela n'est pas nécessaire d'appeler autre chose que la commitation.

La réponse de Max Beikirch est trompeuse , car il provoque la disparition du sélecteur de couleur (et de la couleur) lorsque la table n'est pas en mode édition. C'est une solution de contournement de mettre la table en mode édition, mais une mauvaise. Donc, cela avant d'afficher la fenêtre de sélection de la couleur lorsque vous cliquez sur le bouton: P>

Écrivez votre cellule avec un sélecteur de couleur comme celui-ci: P>

public class ColorTableCell<T> extends TableCell<T, Color> {    
    private final ColorPicker colorPicker;

    public ColorTableCell(TableColumn<T, Color> column) {
        this.colorPicker = new ColorPicker();
        this.colorPicker.editableProperty().bind(column.editableProperty());
        this.colorPicker.disableProperty().bind(column.editableProperty().not());
        this.colorPicker.setOnShowing(event -> {
            final TableView<T> tableView = getTableView();
            tableView.getSelectionModel().select(getTableRow().getIndex());
            tableView.edit(tableView.getSelectionModel().getSelectedIndex(), column);       
        });
        this.colorPicker.valueProperty().addListener((observable, oldValue, newValue) -> {
            if(isEditing()) {
                commitEdit(newValue);
            }
        });     
        setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
    }

    @Override
    protected void updateItem(Color item, boolean empty) {
        super.updateItem(item, empty);  

        setText(null);  
        if(empty) {     
            setGraphic(null);
        } else {        
            this.colorPicker.setValue(item);
            this.setGraphic(this.colorPicker);
        } 
    }
}


0 commentaires

0
votes

C'est comme Michael Simons, a déclaré dans le commentaire sur l'OP. Vous devez être dans MODE EDIT . Lors de la création de vos propres cellules personnalisées, vous pouvez déclencher le mode d'édition manuellement en appelant créé (); de l'intérieur de la nappeCell.

Par exemple, en utilisant la concentration de votre commande: xxx


0 commentaires