auto numéroté les lignes de la table (javafx)
Ma question est comment faire une nouvelle Table dans JavaFX avec dans la première colonne de l'index de la tableRow.
J'ai donc créé une classe: NrCellFactory.
public class NrCellFactory<S, String> extends TableCellFactory<S,String> {
private class NrCell<S,String> extends TableCell<S,String>{
public NrCell(){
setText(this.getTableRow().getIndex()+"");
}
}
@Override
protected TableCell<S, String> createTableCell(TableColumn<S, String> column) {
return new NrCell();
}
}
et puis j'ai mis ma colonne, où les chiffres doivent être affichés:
nrCol.setCellFactory(new NrCellFactory<Person,String>());
lorsque je charge le projet, la nrCol a pas de données...
Quelqu'un peut-il résoudre le problème?
Grâce
OriginalL'auteur Toon Boeckling | 2013-05-05
Vous devez vous connecter pour publier un commentaire.
La Solution De L'Échantillon
Voici une solution à l'aide d'une cellule de l'usine:
Simple Solution De Rechange
Et de simplifier l'échantillon à l'aide de la valeur d'une cellule de l'usine et aucune cellule d'usine pour le cas normal où tous les éléments à l'appui de la liste de données de la table sont uniques et leur index peut être regardé par
table.getItems().indexOf(p.getValue())
:Pourquoi votre tentative de faire échec
Je ne pourrais pas dire exactement pourquoi votre tentative de faire échec car je ne pense pas qu'il y est assez de code dans votre question à poser un diagnostic précis de la panne. Ma conjecture est que vous n'avez pas à fournir de la valeur d'une cellule de l'usine pour la ligne et également la mise en place du texte dans la cellule du constructeur plutôt qu'un
updateItem
appel a causé de ne pas travailler.Exécutable De L'Échantillon
Ici est un exécutable de l'échantillon:
J'ai essayé le simple solution de rechange mentionnées dans le présent. J'ai un problème. incrément automatique fonctionne comme un charme, sans aucun doute. Cependant, je suis en train d'écrire le contenu de la table dans un fichier. Comment puis-je obtenir la valeur de la numberCol?
Veuillez poser une nouvelle question naveen, vous pouvez faire référence à cette réponse dans votre question si vous n'avez pas à copier et coller un tas de trucs.
OriginalL'auteur jewelsea
Dans java 8, il peut être fait même plus facile avec une expression lambda:
comment commencer à partir de 1 ,sans le 0
il suffit d'ajouter un à la suite de
indexOf()
. (Mais @fabian est à droite.)OriginalL'auteur Michael
C'est un universel (Générique) de l'usine cellulaire, vous pouvez simplement utiliser n'importe où:
Utilisation:
colRowNum.setCellFactory(new LineNumbersCellFactory());
Supprimer le +1 si vous avez besoin d'0-indexé lignes.
EDIT: Ajouté
else
bloc lors de la suppression d'élémentsOriginalL'auteur Dave_cz
Une approche simple qui ne dépend pas de
indexOf(item)
ou surupdateItem()
(qui peut ou peut ne pas être le seul événement que vous auriez besoin d'écouter) est de lier la propriété text de laTableCell
à son index de ligne:Si vous ne vous souciez pas de savoir si ou non les lignes contenant des données, vous pouvez supprimer le
rowIndex < ...size()
vérifier:OriginalL'auteur David Moles