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 :

Dessiner un rectangle proportionnel à la fenêtre


Sujet :

JavaFX

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Par défaut Dessiner un rectangle proportionnel à la fenêtre
    Bonsoir,

    J'ai une question à vous poser concernant JavaFX, j'espère que vous pourrez m'aider.
    Je souhaite créer un application graphique utilisant les propriétés (property) et les liaisons (binding).
    J'ai réduit le code de mon application au maximum afin de vous montrer mon problème.

    Je vous explique ce que je veux faire : je veux afficher un rectangle au milieu de la fenêtre (dans un borderPane), ce rectangle est dans une HBox (je pense que le problème vient de là), et j'aimerais que le rectangle s'agrandisse et rétrécisse en même temps que son conteneur (la HBox) (par exemple pendant une diminution de la taille de la fenêtre).

    Voici mon code :
    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
     
    public class Test extends Application {
     
    	@Override
    	public void start(Stage primaryStage) {
    		BorderPane borderPane = new BorderPane();
    		HBox hBox = new HBox();
     
    		hBox.setAlignment(Pos.CENTER);
     
    		Rectangle rect = new Rectangle(hBox.getWidth(),50);
    		rect.setFill(Color.RED);
    		rect.widthProperty().bind(hBox.widthProperty().subtract(20));
     
    		hBox.getChildren().add(rect);
     
    		borderPane.setCenter(hBox);		
     
    		Scene scene = new Scene(borderPane, 900, 600, Color.WHITE);
     
    		primaryStage.setScene(scene);
    		primaryStage.show();
     
    	}
     
    	public static void main(String[] args) {
    		launch(args);
    	}
     
    }
    Mais il ne fonctionne pas vraiment... Quand je redimensionne doucement ma fenêtre, ça fonctionne, cependant, quand je redimensionne celle-ci rapidement le rectangle ne se situe plus au milieu, on a même l'impression qu'il est plus grand que la fenêtre, pareil quand on maximise et minimise la fenêtre.

    Je n'arrive pas à comprendre l'origine de mon problème.

    Merci pour votre aide,

    Florian.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 896
    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 896
    Billets dans le blog
    54
    Par défaut
    Mouai, j'suis pas trop sur de ce que tu veux obtenir mais en général pour les nœuds qui sont des composants géométriques, ils ne vont pas nécessairement bien se mélanger avec des gestionnaires de mise en page qui sont plutôt destinés aux contrôles sans parler que en plus ici tu veux faire un truc custom.

    J'partirai plus sur ce genre de solution qui semble mieux fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Region rect = new Region();
    rect.setPrefSize(100, 50);
    rect.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));
    HBox.setHgrow(rect, Priority.ALWAYS);
    HBox hBox = new HBox();
    hBox.setPadding(new Insets(0, 10, 0, 10));
    hBox.setAlignment(Pos.CENTER);
    hBox.setFillHeight(false);
    hBox.getChildren().add(rect);
    borderPane.setCenter(hBox);
    Sinon après si tu tiens toujours à utiliser une forme géométrique, je pense qu'il vaut mieux utiliser un gestionnaire simple (Region, Pane, AnchorPane, StackPane), voir pas de gestionnaire du tout (Group) et surcharger sa méthode layoutChildren() pour bien placer et redimensionner le nœud enfant plutôt que d'utiliser du binding.
    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
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Par défaut Résolu
    Super merci beaucoup, cela fonctionne parfaitement !
    Il y a juste une petite chose que je ne comprends pas, c'est pourquoi nous sommes obligés de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hBox.setFillHeight(false);
    Parce que sans ça la région s'étend sur tout la hauteur alors que la "preferedSize" est de 50*100.

    En tout cas merci de ta réponse, elle va bien m'aider.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 896
    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 896
    Billets dans le blog
    54
    Par défaut
    Par défaut (quand la valeur est true) la boite va s'efforcer d'étendre tout les contrôles redimensionnables pour qu'ils prennent toute la hauteur. Region est un contrôle redimensionable donc du coup ça ne collait pas avec ce qui s'affichait quand tu utilisais Rectangle.
    La hauteur préférée est juste un indicateur dans bien des cas. Il aurait probablement aussi fallu changer la hauteur maximale (rappel : pour les contrôles on a la taille, la taille min, la taille max et la taille préférée). Et encore bien des gestionnaires de mise en page ignorent ces indications pour faire à leur propre sauce.
    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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Par défaut
    Ok, je comprends mieux .
    Merci encore pour ton aide !

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/04/2008, 15h26
  2. Réponses: 14
    Dernier message: 13/10/2005, 15h00
  3. Dessiner un rectangle sur une forme
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 13/08/2005, 01h08
  4. [VB.NET] Dessiner plusieurs rectangles.
    Par Emcy dans le forum Windows Forms
    Réponses: 9
    Dernier message: 23/03/2005, 16h57
  5. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

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