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

Agents de placement/Fenêtres Java Discussion :

[JFrame] Taille de la fenêtre complète (avec titre et bordures)


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    RXN
    RXN est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut [JFrame] Taille de la fenêtre complète (avec titre et bordures)
    Bonjour,

    J'aimerai savoir s'il est possible de connaître les dimensions de la zone "client" d'un fenêtre swing à l'instar de le fonction GetClientRect(RECT*) de l'API Win32

    Voici mon problème:
    J'affiche une image de fond dans ma fenêtre. (Je la mets à jour dans la méthode paint() ).
    J'ai donc défini la taille de ma fenêtre setSize(cx,cy) à la même taille que celle de mon image de fond.
    Mon soucis c'est que cette image, que j'affiche aux coordonnées (0,0) n'apparait pas entièrement puisqu'une partie est masquée par la bordure et la barre de titre de la fenêtre.
    En effet, setSize() défini la taille totale de la fenêtre, c'est pourquoi j'aimerai connaître la taille de la zone client, afin d'ajuster la taille de la fenêtre complète en conséquence.

    Eric

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Tu devrais plutot redefinir la methode paintComponent() d'un JPanel que tu met dans ta frame en BorderLayout.CENTER.
    Ou alors voir si tu peux redefinir le contentPane de cette frame avec ce meme panel.

    Sinon si tu veux que ca recouvre toute la "fenetre" en essayant ta methode tu peux essayer, soit d'enlever les decorations (setUndecorated(true) avant l'affichage) soit d'utiliser une JWindow a la place.
    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
    RXN
    RXN est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    D'accord merci. Je vais étudier tout ça...

    Eric

  4. #4
    RXN
    RXN est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Encore une fois, tu m'as mis sur la voie!
    J'ai donc procédé avec JPanel que j'ai dérivé afin de lui permettre d'afficher mon image de fond.
    En plus, c'est vrai que c'est beaucoup plus cohérent comme ça.
    Voici donc comment je me suis débrouillé pour corriger la taille de la fenêtre parent:

    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
    // Créer un panel
    m_panelImg = new JPanelImg(imgInterface);
     
    setContentPane(m_panelImg);
    Dimension dimImage = m_panelImg.getDimImage();
     
    // Comprimer la fenêtre au minimum
    pack();
     
    // Calculer la différence entre la zone client et la zone fenêtre
    int bordureHori = getSize().width - m_panelImg.getSize().width;
    int bordureVert = getSize().height - m_panelImg.getSize().height;
     
    // Réajuster la taille de la fenêtre en fonction du calcul précédent
    setSize(dimImage.width + bordureHori, dimImage.height + bordureVert);
    Merci encore,

    Eric

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    De rien.

    Si tu veux remplir le panel quel que soit sa taille (nottement si la frame est redimensionnable) 3 solutions simples s'offrent a toi :

    - etendre/reduire ton image en utilisant la variante de drawImage() qui prend une taille. Les resultats optenus dependent principalement de l'indice de rendu d'interpolation et peut-etre aussi de la qualite et de l'antialias. Evidement en aggrandissant trop une petite bitmap on a des resultats pourris/pixelises qq soit le type d'interpolation utilisee. Inversement trop reduire une grande bitmap ne donnera qu'un flou artistique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INPERPOLATION_BILINEAR); // Ou une autre valeur de l'indice.
    ...
    graphics.drawImage(image, 0, 0, panelWidth, panelHeight, null);
    - Faire un damier ou un remplissage continu en faisant des boucles sur les 2 tailles (largeur/hauteur) et en repeignant ton image a grands coups de drawImage() (a sa taille initiale) jusqu'a ce que la surface du panel soit remplie.

    - Faire un damier ou un remplissage continu en creant un nouveau TexturePaint et faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Paint texture = new TexturePaint(image, new Rectangle(0, 0, image.getWidth(), image.getHeight()));
    ...
    graphics.setPaint(texture);
    graphics.fillRect(0, 0, panelWidth, panelSize);
    Perso je prefere cette derniere solution pour la creation du damier (y a a pas besoin de faire les calculs soi-meme).
    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
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Plutot que de manipuler la taille de la fenetre ca sera peut-etre plus simple de mettre la PreferredSize et la MinimumSize du panel contenant l'image a la taille de cette meme image. Comme ca apres un simple frame.pack() suffit.
    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

  7. #7
    RXN
    RXN est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    hum, j'ai essayé avec les fonction setPreferedSize(), setMinmimumSize() et setMaximumSize() mais après un pack() ma fenêtre devient toute petite.
    J'imagine donc qu'il faudrait travailler avec un Layout mais alors je ne ferait pas d'économie de code et encore moins de ressources.

    Cela fonctionne parfaitement ainsi, je vais donc m'en tenir là.

    En ce qui concerne le mapping de l'image, je garde tes conseils sous le coude car ils me seront très utiles pas la suite.
    En fait l'image que je mets en fond de l'application correspond à la représentation de l'interface du programme. Elle à donc une fonction qui va au delà de la simple décoration.
    Par contre je serais peut être amené à gérer l'agrandissement ou la réduction de la fenêtre par l'utilisateur.
    Il faudra donc que je maintienne le ratio de l'aspect de la fenêtre. Je ne sais pas exactement encore comment je vais procéder mais je verrai ça plus tard.

    merci,

    Eric

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    A ok, je pensais que tu avais un BorderLayout.
    Dans ce cas oui mieux vaut alors faire comme tu as fais.
    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

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

Discussions similaires

  1. [Lazarus] Rafraîchir graphique avec scrollbar - Fixer taille de la fenêtre
    Par florangers dans le forum Lazarus
    Réponses: 3
    Dernier message: 03/06/2009, 22h25
  2. Figer une fenêtre avec titre
    Par MC2 dans le forum IHM
    Réponses: 1
    Dernier message: 19/06/2008, 09h05
  3. Réponses: 2
    Dernier message: 22/02/2008, 22h22
  4. [C#] taille d'une fenêtre avec son handle
    Par damned3 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 03/10/2006, 04h39
  5. Fenêtre sans barre titre et avec bordures
    Par gbuxo dans le forum Access
    Réponses: 7
    Dernier message: 22/09/2006, 14h13

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