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

AWT/Swing Java Discussion :

Adapter la police avec la résolution d'écran


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut Adapter la police avec la résolution d'écran
    Bonjour à tous,

    J'ai adapté toutes les fenêtres en fonction de la résolution d'écran, mais j'ai un problème avec la police.

    En faite, ce problème reflète plus d'un calcul mathématique.

    J'essai de transformé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Font("Arial", Font.BOLD, 20);//20
    En ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static Font arial20 = new Font("Arial", Font.BOLD, (int) Math.round(Toolkit.getDefaultToolkit().getScreenSize().width*20*0.000625));//20);
    J'utilise 1/1600, car j'ai tous créer avec cette résolution (résolution de référence)

    Résolution 1600 en width;
    Résolution 1024 en width ->13. Donne Arial 20

    Le problème est que j'ai des problèmes d'affichage avec des mots qui ne se terminent pas.

    Je me demandais si le fait d'appliquer un arial 20 ( le 20 représente 20 pixels?)
    Mais a quoi correspond ce 20?

    Si vous avez des idées, ou méthode?

    Merci

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Si tu fait un calcul mathématique tu le fait en dehors d'un appel de fonction.

    Maintenant, pour savoir si ton string va tenir dans la longueur de l'écran, je te conseil d'utiliser les méthodes get "Metrics"
    http://download.oracle.com/javase/7/...neMetrics(char[],%20int,%20int,%20java.awt.font.FontRenderContext)

    Comme cela tu sais si avec une font de 20 tu dépasse la taille que tu as.
    (Tu réduit la taille à chaque fois que ça dépasse)
    Et là t'as la taille qu'il te faut.


    Il y a un exemple ici :
    http://www.developpez.net/forums/d90...e/#post5124004
    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci kolodz,

    Exactement ce que je cherchais.

    Ce que tu nommes: "appel de fonction" est une variable dit "statique"?

    Edit> Voilà ce que donnerais la roulette de la police:
    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
    public class Police {
    	private static final boolean DEBUG = false;
     
    	public static Font init_taille(String texte, String type_police, int bold, int taille) {
    		// TODO Auto-generated method stub
    		int taille_max = Math.round(taille*Taille_panel.getPanel_width()/1600);//On vérifie la résolution
    		int taille_police=12;//taille de départ
    		Font police = new Font(type_police, bold, taille_police);
    		JLabel label = new JLabel(texte);
    		int a=0;
    		while (a!=1){
    			label.setFont(new Font(type_police, bold, taille_police));
    	        FontMetrics fm = label.getFontMetrics(label.getFont());
    			int textWidth = fm.stringWidth(texte);
    			if(DEBUG){
    				System.out.println("Texte width: "+textWidth);
    				System.out.println("Taille pixels: "+taille);
    				System.out.println("Taille pixels_résolution: "+taille_max);
    				System.out.println("Taille police: "+taille_police);
    			}
    			if (textWidth > taille_max)
    			{
    				a=1;
    				police= new Font(type_police, bold, taille_police-1);
    			}
    			else{
    				taille_police++;
    			}
    		}
    		return police;
    	}
    }
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JLabel conso_affichage = new JLabel(" CONSOMMATIONS DES TOURNOIS :");
    			conso_affichage.setFont(Police.init_taille(" CONSOMMATIONS DES TOURNOIS :", "Arial", Font.BOLD, 400));//Taille max 400 pixels (résolution 1600)
    Si j'applique cette roulette sur toutes les polices, ça risque d'être lourd?
    Peut on éviter quelques boucles?

    Qu'en pensez vous?

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Quand je parle de ne pas mettre de calcule dans un appel de fonction, je parle de cette ligne là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static Font arial20 = new Font("Arial", Font.BOLD, (int) Math.round(Toolkit.getDefaultToolkit().getScreenSize().width*20*0.000625));//20);
    Il est préférable de faire les calculs avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int size = (int) Math.round(Toolkit.getDefaultToolkit().getScreenSize().width*20*0.000625);
    public static Font arial20 = new Font("Arial", Font.BOLD, size);//20);
    Ce qui rend le tout un peu plus lisible.

    Si vous avez des doutes sur le temps que prend vos boucles vous pouvez ajouter temporairement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    long begin = System.currentTimeMillis();
    taFonction();
    long end = System.currentTimeMillis();
    float time = ((float) (end-begin)) / 1000f;
    System.out.println("Le calcule de la size me coûte "+time+" secondes);
    De plus, la taille de la police n'est pas un élément qui va varier au court de l'application. Tout dépend de ce que tu estime tolérable.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci pour ton aide Patrick

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 24/11/2023, 20h24
  2. Site garde proportions avec toutes résolutions d'écran
    Par guitz dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 21/10/2012, 10h04
  3. Adapter un Form aux différentes résolutions d'écran
    Par pjtuloup dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/06/2011, 10h23
  4. Réponses: 20
    Dernier message: 16/08/2006, 15h32
  5. Réponses: 1
    Dernier message: 11/05/2006, 15h17

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