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. 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? P> P>
4 Réponses :
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. p>
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. P>
SO: Pour déclencher le 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. P> EditCommit Code> -Event, vous devez appeler
setContentDisplay (contentdisplay. Text_only) code> dans
upmateItem () code>. 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. P>
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.
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 " Donc, pour moi. ceci (mise à jour de la couleur): p> Voici l'exemple avec ColorPickerCell
: p> avec ce simple pojo de JavaFx simple: p> 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.) P> Cordialement, P> P>
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); } } }
C'est comme Michael Simons, a déclaré dans le commentaire sur l'OP. Vous devez être dans Par exemple, en utilisant la concentration de votre commande: p> créé (); code> de l'intérieur de la nappeCell.
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