Remplacer un nœud à l' (ligne,col) dans un JavaFX GridPane
Je fais un grille-style de jeu/simulation basée sur les bugs "de détection" et manger de la nourriture. Je suis à l'aide d'un gridPane (appelé worldGrid
) d'étiquettes pour afficher la grille de bugs et de la nourriture. C'est évidemment à être constamment mis à jour lorsqu'un bug se déplace cellules vers la nourriture, etc.
J'ai actuellement une fonction updateGrid(int col, int row, String cellContent)
qui je veux remplacer l'étiquette à [row,col] avec un label qui a le nouveau texte dans cellContent.
J'ai de la suite qui fonctionne
worldGrid.add(new Label(cellContent), row,col);
toutefois im peur que ce est juste l'ajout d'une étiquette sur le dessus de l'étiquette actuelle et, évidemment, plus de 100 itérations de la simulation, c'est pas l'idéal.
J'ai essayé cela avant l'ajout de l'étiquette:
worldGrid.getChildren().remove(row,col);
Cependant je puis obtenir un IllegalArgumentException
en essayant de faire le add
ligne.
Des idées sur comment faire cela? Ou encore mieux, toutes les idées sur la meilleure façon de montrer une évolution constante de la grille, qui va finalement utiliser des sprites à la place du texte?
OriginalL'auteur JabbaWook | 2014-11-26
Vous devez vous connecter pour publier un commentaire.
Le col/ligne fourni par la grille.ajouter(nœud, col, ligne) (ATTENTION en premier vient le col!) n'est qu'une contrainte de mise en page. Cela ne constitue pas un moyen d'accéder à des colonnes ou des lignes comme les machines à sous dans un tableau en 2 dimensions. Afin de remplacer un nœud, vous devez connaître son objet lui-même, par exemple, de les rappeler dans un tableau séparé.
Alors vous êtes en mesure d'appeler getChildren().remove(object)... par exemple:
Si vous avez plus de 1 colonne de la grille (qui sûrement vous faire), vous devez supprimer l'ensemble de la ligne et de l'ajouter à nouveau avec le nouveau Nœud et en gardant le même que l'égalité.
Joe Almore c'est absolument pas vrai. Vous pouvez supprimer un seul nœud, puis ajouter un autre à sa position, comme le montre l'exemple
OriginalL'auteur Jens-Peter Haack
Je suis d'accord avec Jens-Peter, mais je voudrais ajouter que vous pouvez utiliser GridPane de getColumnIndex et getRowIndex pour obtenir un nœud particulier.
Par exemple ( c'est un composant qui s'étend GridPane ):
en d'autres termes, passer par tous les nœuds dans le GridPane et de vérifier pour un match les conditions que vous souhaitez, dans ce cas, de ligne et de colonne.
OriginalL'auteur T-and-M Mike
Vous avez appelé getChildren().méthode remove() directement sera la cause de la gridpane à aller hors de synchronisation avec les contraintes. Lorsque vous ajoutez, il a également de l'installation de la contrainte pour le nœud. Ajouter clearConstraints() la méthode.
OriginalL'auteur PhucLy