2017-10-18 4 views
-1

Je suis un développeur débutant java étudiant et je dois créer un jeu simple dans java fx. Je veux apprendre cela, ne pas utiliser de modèle ou de jeu d'autres auteurs. J'ai un problème avec GridPane. donc j'ai 8 éléments dans mon application ex. le texte, l'étiquette et l'image, mais mon problème est d'arranger les éléments sur la scène. Par exemple, si j'essaie de positionner un élément, les autres éléments perdent leur position. Qu'est-ce que je fais de mal?Positon de l'élément - GridPane dans JavaFX

code:

grid.setHgap(20); 
    grid.setVgap(20); 
    grid.setPadding(new Insets(10, 10, 10 ,10)); 
    grid.add(welcome, 10, 0); 

btw. gridPane est bon pour le jeu de dames simples? Merci

+1

Créez un [MCVE] qui illustre le problème et [edit] votre question pour l'inclure. Le code que vous avez posté ne correspond pas du tout au problème que vous décrivez (d'une part, vous n'avez qu'un nœud ajouté au volet de la grille). –

Répondre

0

Ainsi, vous avez défini un remplissage sur chacune de vos colonnes et rangées, ce qui signifie qu'il y aura 10px d'espace sur tous les côtés de chaque élément de la grille. Ensuite, vous avez ajouté quelque chose dans la 10e colonne. Cela crée toutes les colonnes 0-9, avec largeur et hauteur 0, car elles n'ont pas de contenu. Cependant, ils prennent chacun un carré de 20x20 pixels, à cause de leur rembourrage. Lorsque vous ajoutez des objets dans ces espaces, bien sûr, ils vont déplacer votre objet welcome, car ils prennent maintenant de l'espace. Au lieu d'utiliser un rembourrage pour créer vos largeurs et hauteurs de colonnes et de rangées, prenez en considération ColumnConstraints et RowConstraints. J'ai ajouté la documentation pour leur utilisation ci-dessous.

De l'GridPane documentation:

ligne/colonne Dimensionnement

Par défaut, les lignes et les colonnes seront dimensionnés en fonction de leur contenu; une colonne sera assez large pour accueillir l'enfant le plus large, une ligne assez grande pour s'adapter au plus grand enfant. Cependant, si une application doit contrôler explicitement la taille des lignes ou des colonnes, elle peut le faire en ajoutant des objets RowConstraints et ColumnConstraints ces métriques. Par exemple, pour créer une grille avec deux colonnes à largeur fixe:

GridPane gridpane = new GridPane(); 
gridpane.getColumnConstraints().add(new ColumnConstraints(100)); // column 0 is 100 wide 
gridpane.getColumnConstraints().add(new ColumnConstraints(200)); // column 1 is 200 wide 

Par défaut, le gridpane redimensionne lignes/colonnes à leurs tailles préférées (soit calculée à partir du contenu ou fixe), même si le gridpane est redimensionnée plus grande que sa taille préférée. Si une application a besoin d'une ligne ou d'une colonne particulière pour se développer s'il y a de l'espace supplémentaire, elle peut définir sa priorité de croissance sur l'objet RowConstraints ou ColumnConstraints. Par exemple:

GridPane gridpane = new GridPane(); 
ColumnConstraints column1 = new ColumnConstraints(100,100,Double.MAX_VALUE); 
column1.setHgrow(Priority.ALWAYS); 
ColumnConstraints column2 = new ColumnConstraints(100); 
gridpane.getColumnConstraints().addAll(column1, column2); // first column gets any extra width 

Remarque: Les nœuds couvrant plusieurs lignes/colonnes seront également dimensionnés aux tailles préférées. Les lignes/colonnes affectées sont redimensionnées par la priorité suivante: augmenter les priorités, dernière ligne. C'est par rapport aux contraintes de ligne/colonne.

Pourcentage des tailles

Alternativement, RowConstraints et ColumnConstraints permettent la taille à préciser en pourcentage de l'espace disponible gridpane:

GridPane gridpane = new GridPane(); 
ColumnConstraints column1 = new ColumnConstraints(); 
column1.setPercentWidth(50); 
ColumnConstraints column2 = new ColumnConstraints(); 
column2.setPercentWidth(50); 
gridpane.getColumnConstraints().addAll(column1, column2); // each get 50% of width 

Si une valeur de pourcentage est fixé sur une ligne/colonne, alors cette valeur a un précédent et les contraintes min, pref, max et grow de la ligne/colonne seront ignorées. Notez que si la somme des valeurs widthPercent (ou heightPercent) est supérieure à 100, les valeurs seront traitées comme des poids. par exemple. si 3 colonnes ont chacune une largeurParente de 50, chacune d'entre elles se verra attribuer 1/3 de la largeur disponible de la grille (50/(50 + 50 + 50)).

mélange des types de taille

Une application peut librement mélanger la taille-types de lignes/colonnes (calculé à partir du contenu, fixe, ou en pourcentage). Le pourcentage de lignes/colonnes sera toujours affecté d'abord en fonction de leur pourcentage de l'espace disponible de la grille (taille moins les insertions et les espaces vides). L'espace restant sera alloué aux lignes/colonnes en fonction de leur taille minimum, préférée et maximale, et augmentera les priorités.