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 :

Contenu redimensionnable en fonction de la résolution


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut Contenu redimensionnable en fonction de la résolution
    Bonjour,

    Est-il possible de construire une application qui se redimensionnerait automatiquement en fonction de la résolution de l'écran ?
    Je ne parle pas simplement du cadre extérieur, mais bien de tous les composants en ce compris les polices de caractère !

    Je vois bien des possibilités en jouant avec les propriétés de mes containers ou contrôles ainsi qu'avec le CSS, mais je voudrais savoir s'il n'existe pas un moyen de tout agrandir ou diminuer en gardant la même proportion.

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    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 904
    Billets dans le blog
    54
    Par défaut
    Tu peux tenter de mettre un facteur de mise a l’échelle sur le noeud racine de l'application root.setScale(facteur). Et il te faudra aussi calculer ce facteur en fonction de la résolution d'affichage en cours. Ça va rendre tes bitmap toutes floues par contre.

    Cependant, je dirais que, par défaut CSS semble être la voie a suivre ; principalement en augmentant la taille de la police. Je pense notamment au fait de positionner des pseudo classes sur le noeud racine de l'UI en fonction de la taille affichée / de la résolution de l’écran. Ça devrait entrainer le changement de taille de tous les composants qui permettent de gérer du texte (ex : TextField, Label, etc.) mais pas forcement du reste de l'UI (ex : le texte d'un CheckBox va être plus gros mais pas la case a cocher en elle-même).

    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    .root {
       -fx-font-size: 1.0em;
    }
    .root:large {
       -fx-font-size: 1.5em;
    }
    .root:xtra-large {
       -fx-font-size: 2.0em;
    }
    .root:xxl {
       -fx-font-size: 5.0em;
    }

    Cependant, à partir du JDK 8_60, la mise à l’échelle sur les machines HiDPI / Retina est sensée être automatique et surtout consistante (ca marchait avec les version précédentes mais le résultat était pas top).
    Et, en plus, tu peux mettre manuellement une UI à l’échelle en passant comme paramètre de JVM le flag -Dglass.win.uiScale=<facteur d’échelle ou pourcentage ou DPI>, par exemple :

    Citation Envoyé par http://news.kynosarges.org/2015/06/29/javafx-dpi-scaling-fixed/
    -Dglass.win.uiScale=200% (in cygwin shell)
    -Dglass.win.uiScale=200%% (in cmd.exe since it eats single '%' chars)
    -Dglass.win.uiScale=192dpi
    -Dglass.win.uiScale=2.00
    Si on utilise -Dglass.win.uiScale=2.00, ça affiche une fenêtre 400 x 400 en 800 x 800 avec tout son contenu en taille double. Par contre ça rend les images bitmaps assez moches du coup. Le contenu vectoriel reste impec bien sur.

    Par exemple avec l'UI suivante :

    Nom : echelle1.jpg
Affichages : 725
Taille : 31,8 Ko

    Ici, les deux images qui composent le header sont définie via CSS :

    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    -fx-background-image: url(header-watermark.png), url(header-arch.png);

    Tandis que l'image centrale est definie par une Image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    final Image image = new Image(getClass().getResource("test-image.png").toExternalForm());
    final ImageView imageView = new ImageView(image);
    Ici si on affiche en double résolution via le flag, soudainement les images deviennent toutes floues et moches :

    Nom : echelle2-LowRes.jpg
Affichages : 848
Taille : 60,1 Ko

    Pour afficher des images en résolution double (et ça apparemment c'est nouveau, même si ça avait été annoncé en 2011-2012), il faut faire comme sur Mac et périphériques iOS Retina : il faut fournir 2 jeux d'images :

    • toto.png est l'image utilisée lors de la mise à l’échelle 1.0
    • toto@2x.png est l'image à résolution x2 utilisée lors de la mise à l’échelle 2.0 (Retina)


    Et pareil pour des résolutions plus hautes :
    • toto@4x.png est l'image à résolution x4 utilisée lors de la mise à l’échelle 4.0 (4K)
    • etc.


    EDIT - après plus de tests, le support du 4x n'est pas fonctionnel.

    Le chargement de l'image appropriée est fait automatiquement par le runtime en fonction de la mise à l’échelle actuelle. Ce qui permet d'obtenir une image toute nette sans changer une ligne dans le code ni dans les CSS ni manuellement changer la taille des polices ou quoi que ce soit :

    Nom : echelle2-HiDPI.jpg
Affichages : 700
Taille : 74,0 Ko

    Avertissement : d’après le blog post la valeur 120% est une valeur spéciale et la mise à l’échelle est désactivée pour cette valeur (on reste à l'échelle 1.0 donc).

    Hum va me falloir mettre à jour la FAQ JavaFX (j'avais pas testé ça jusqu'à lors).
    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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2015, 18h42
  2. Redimensionner son site en fonctione de la résolution de l'utilisateur
    Par matimat2k4 dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 13/05/2008, 20h40
  3. problème positionnement en fonction de la résolution
    Par zodd dans le forum Mise en page CSS
    Réponses: 15
    Dernier message: 10/10/2006, 09h12
  4. Réponses: 1
    Dernier message: 24/07/2006, 17h28
  5. hauteur d une balise div en fonction de la résolution
    Par echecetmat dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/01/2005, 10h51

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