IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Placement du Root dans la Scene


Sujet :

JavaFX

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut Placement du Root dans la Scene
    Salut à tous,

    J'ai créé un GridPane en tant que root de ma scene principale et unique.
    L'affichage ce passe bien mais je ne comprends pas bien comment positionné le grid dans la scene. N'ayant pas de Scene en fond de mon Grid dans SceneBuilder, je ne peux pas réellement voir ou va se placer le Grid que je travail graphiquement.

    Lorsque je positionne mes LayoutX et Y à 0 mon Grid viens se mettre au milieu gauche de mon application.

    Lorsque je positionne à 400 et 300 (j'ai configuré ma scene en 800x600), mon grid est pas tout fait visible en bas au milieu de mon application. Le grid deborde et une partie n'est plus visible.

    Je fonctionne en .fxml pour mon Grid :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?xml version="1.0" encoding="UTF-8"?>
     
    <?import java.lang.*?>
    <?import javafx.geometry.Insets?>
    <?import javafx.scene.control.Button?>
    <?import javafx.scene.control.Label?>
    <?import javafx.scene.image.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.layout.GridPane?>
     
    <GridPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml"
              hgap="10.0" layoutX="0.0"
              vgap="10.0" layoutY="0.0">
     
      <children>
     
        <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="0" GridPane.rowIndex="0">
          <image>
            <Image url="file:/G:/images/92n.jpg" preserveRatio="false" smooth="false" />
          </image>
        </ImageView>
     
        <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="0" GridPane.rowIndex="0">
          <image>
            <Image url="file:/G:/images/63n.jpg" preserveRatio="false" smooth="false" />
          </image>
        </ImageView>
     
      </children>
     
      <columnConstraints>
        <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
      </columnConstraints>
     
      <rowConstraints>
        <RowConstraints vgrow="SOMETIMES" minHeight="10.0"  />
      </rowConstraints>
     
    </GridPane>
    Ainsi que la création et le lancement de ma scene :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    package sample;
     
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
     
    public class Main extends Application
    {
        public static void main(String[] args)
        {
            launch(args);
        }
     
        @Override
        public void start(Stage primaryStage) throws Exception
        {
            Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
     
            Scene scene1 = new Scene(root, 800, 600);
     
            primaryStage.setTitle("gestionnairarium");
            primaryStage.setScene(scene1);
            primaryStage.show();
        }
     
    }
    Merci de vos éclairages les FXiens.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Et pourquoi ne pas simplement mettre un AnchorPane comme root et attacher ta grille dans ce pane avec les contraintes qui vont bien (au hasard, 0, 0, 0, 0) ?

    Et sinon tu peux aussi utiliser ScenicView pour explorer le contenu de la scène au moment de l'exécution.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Et pourquoi ne pas simplement mettre un AnchorPane comme root et attacher ta grille dans ce pane avec les contraintes qui vont bien (au hasard, 0, 0, 0, 0) ?
    Même si cela pourrait résoudre mon problème ou m'ammener à ce que je cherche faire (ce qui aujourd'hui n'est pas encore très clair dans les détails) cette solution ne m'interesse pas. Car je suis devant une incompréhension et je préfère comprendre pourquoi je me retrouve dans cette situation.

    J'ai comme tu dis ma dit lancer ScenicView pour voir plus en détails mon application pendant qu'elle tourne. et je suis apercu de 2 choses :
    - mon GridPane prends automatiquement la taille de ma scene en entier
    - le déplacement de mon GridPane n'implique pas le déplacement de mes 2 images filles du Grid.

    Sauve moi bouye, j'ai beau faire un effort je ne comprends pas bien ma situation et je t'avoue que ca me refroidi d'essayer d'ajouter d'autres chose à mon interface pour le coup

    Quelle serait l'option par défaut et caché qui impliquera que mon Grid face la dimension de ma scene par exemple ?

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut
    Citation Envoyé par miltone Voir le message
    Même si cela pourrait résoudre mon problème ou m'ammener à ce que je cherche faire (ce qui aujourd'hui n'est pas encore très clair dans les détails) cette solution ne m'interesse pas. Car je suis devant une incompréhension et je préfère comprendre pourquoi je me retrouve dans cette situation.

    J'ai comme tu dis ma dit lancer ScenicView pour voir plus en détails mon application pendant qu'elle tourne. et je suis apercu de 2 choses :
    - mon GridPane prends automatiquement la taille de ma scene en entier
    GridPane est un container resizable : donc il est automatiquement retaillé
    par la Scene pour remplir l'espace disponible (voir la javadoc de Scene).
    Citation Envoyé par miltone Voir le message

    - le déplacement de mon GridPane n'implique pas le déplacement de mes 2 images filles du Grid.
    Etrange. Par déplacement, tu veux dire changer "layoutX" et "layoutY" ?

    Citation Envoyé par miltone Voir le message

    Sauve moi bouye, j'ai beau faire un effort je ne comprends pas bien ma situation et je t'avoue que ca me refroidi d'essayer d'ajouter d'autres chose à mon interface pour le coup

    Quelle serait l'option par défaut et caché qui impliquera que mon Grid face la dimension de ma scene par exemple ?
    Ce n'est pas une option cachée : c'est la spécification de l'objet Scene.

    A+

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Bon alors :
    • Le GridPane est placé en root de la Scene. Il est donc normal qu'il soit redimensionné et prenne toute la place, ça fait pareil quand un contrôle ou un layout est mis en root.
    • Il y a une seule colonne qui est en redimensionnement SOMETIMES. Il est donc normal qu'elle prenne toute la largeur de la table.
    • Il y a une seule ligne qui est en redimensionnement SOMETIMES. Il est donc normal qu'elle prenne toute la hauteur de la table.
    • Par défaut les colonnes ont un alignement horizontal à LEFT. Il est donc normal que le contenu soit aligné horizontalement sur la gauche.
    • Par défaut les lignes ont un alignement vertical sur CENTER. Il est donc normal que le contenu soit aligné verticalement sur le centre.
    • Les deux ImageView sont dans la même ligne et la même colonne et ont la même taille*. Ils sont donc affiché superposés avec le second qui s'affiche par dessus le premier (et donc le cache).
    • De plus ImageView n'est pas un composant redimensionnable de base et donc il est normal qu'il ne s’agrandisse pas.


    *Enfin pas tout à fait, car ils ont preserveRatio à true donc en fait les proportions de chacune des deux images influent. Par exemple dans mon cas, pour le test, elles n'ont pas tout à fait le même ratio et donc mon premier ImageView fait 148.12x150 contre 150x150 alors que les deux devraient avoir une taille de 200x150 (qu'ils ont, si on met preserveRatio à false dans les déclaration des ImageView dans le FXML). Apparemment c'est donc la hauteur qui prime sur la largeur dans les calculs quand fitWidth ET fitHeight sont déclarés dans le FXML.

    Donc pour moi l'affichage est tout à fait correct.

    Que cherchais-tu donc à faire ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Etrange. Par déplacement, tu veux dire changer "layoutX" et "layoutY" ?
    Tout à fait mais ca doit encore être un truc évident que je ne vois pas...

    Merci bouye pour ces précisions. J'essaie simplement de jouer avec un GridPane mais je remarque que certaines évidence n'existe pas vraiment dans javaFX. Les choses sont faites vraiment différemment de ma logique.

    Comme le fait de chercher comment initialiser mes colonnes et mes lignes pour le GridPane. Je ne trouve rien concernant le nombre de ceux-ci désiré...

    Je vais effectivement finir par faire un AnchorPane je crois

    Apparement la logique du resizable est très présente en JavaFX je devrais y faire plus attention.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] placement du pointeur dans un array??
    Par karlitos dans le forum Langage
    Réponses: 2
    Dernier message: 17/10/2006, 08h38
  2. Se loguer root dans un script
    Par mikebranque dans le forum Administration système
    Réponses: 2
    Dernier message: 18/08/2006, 11h12
  3. [FLASH 8] Afficher un movie clip dans la scène :s:s
    Par cipher16 dans le forum Flash
    Réponses: 4
    Dernier message: 28/06/2006, 18h53
  4. Connexion root dans un script shell ou C
    Par arno29 dans le forum Linux
    Réponses: 6
    Dernier message: 20/06/2006, 16h24
  5. Comment bloquer un user non root dans son home directory sous debian?
    Par programmerPhil dans le forum Administration système
    Réponses: 7
    Dernier message: 01/06/2006, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo