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

Java Discussion :

[Java] Affichage qui dépend de la version de Windows


Sujet :

Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut [Java] Affichage qui dépend de la version de Windows
    Bonjour,

    j'ai créé un logiciel en Java.
    Il y a un problème d'affichage avec certains PC.

    Aucun problème lorsque j'utilise le logiciel sous XP mais en l'utilisant sous Seven, l'affichage des boutons ou d'autres objets plante (les boutons n'ont plus la même forme, ...).

    J'aimerai savoir si vous avez déjà eu ce problème.

    Est-ce que cela vient de la version de Windows ?
    32 ou 64 bits peut-il changer quelque chose ?

    Comment y remédier ?

    Merci pour vos commentaires.
    Bonne journée.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Version Java
    as-tu la même version de java installé sur tes différents pc ?

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Il faut t'attendre, et c'est normal, à ce que ton application s'affiche différement sous windows , linux, mac os x, et même d'une version à l'autre de ces OS voir même d'un écran à l'autre (DPI différent = police différente). Quels layout as-tu utilisé? Poste une capture d'écran de ton problème et un peu de code.

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour

    Regarde du coté Look and Feel si cela peut t'intéresser.

    A+.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Voici un imprimé écran du logiciel sur mon pc (affichage correct) et un sur un pc utilisant seven (pb affichage).

    Je n'ai pas utilisé de look and feel.
    Le layout principalement utilisé est gridbaglayout.

    Qu'en pensez-vous ?
    Images attachées Images attachées   

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ce ne sont pas des boutons standards, comment fais-tu l'affichage de ces boutons? Ca doit être dans tes méthodes de dessin custom que se trouve le bug. A vu de nez, je diras que tu essaie de dessiner par transparence partielle, mais que tu ne récupère pas le bon "fond" derrière le bouton.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Merci pour vos réponses. Désolé de ne réagir que maintenant (je n'ai pas pu faire autrement).

    Voici la classe permettant de créer les boutons :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Paint;
    import java.awt.RenderingHints;
    import java.awt.geom.RoundRectangle2D;
     
    import javax.swing.JButton;
     
    public class JCoolButton extends JButton {
     
    	private int inset = 5;
    	private Color couleurBas = new Color(0,0,0,200);
    	private Color buttonColor = couleurBas;
     
     
    	public JCoolButton(){
    		super();
    		setContentAreaFilled(false);
    		setForeground(Color.white);
    	}
     
     
    	public JCoolButton(String aNameString){
    		super(aNameString);
    		setContentAreaFilled(false);
    		setForeground(Color.white);
    	}
     
     
     
    	protected void paintComponent(Graphics g)
    	{
     
    		Graphics2D g2d = (Graphics2D) g;
    		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     
    		int vWidth = getWidth();
    		int vHeight = getHeight();
     
    		// Calculate the size of the button
    		int vButtonHeight = vHeight - (inset * 2);
    		int vButtonWidth = vWidth - (inset * 2);
    		int vArcSize = vButtonHeight;
     
    		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     
    		// Create the gradient paint for the first layer of the button
    		Color vGradientStartColor =  buttonColor.darker().darker().darker();
    		Color vGradientEndColor = buttonColor.brighter().brighter().brighter();
    		Paint vPaint = new GradientPaint(0, inset, vGradientStartColor, 0, vButtonHeight, vGradientEndColor, false);
    		g2d.setPaint(vPaint);
     
    		// Paint the first layer of the button
    		g2d.fillRoundRect(inset, inset, vButtonWidth, vButtonHeight, vArcSize, vArcSize);
     
    		// Calulate the size of the second layer of the button
    		int vHighlightInset = 2;
    		int vButtonHighlightHeight = vButtonHeight - (vHighlightInset * 2);
    		int vButtonHighlightWidth = vButtonWidth - (vHighlightInset * 2);
    		int vHighlightArcSize = vButtonHighlightHeight;
     
     
    		// Règle la police du bouton
    /*
    		Font fontEntered = new Font(Font.DIALOG, Font.BOLD, 12);
    		setFont(fontEntered);
    */		
    		// Create the paint for the second layer of the button
    //		vGradientStartColor = Color.BLUE;
    		vGradientStartColor = new Color(0,0,255,200);
    //		vGradientStartColor = new Color(255,255,255,200);
    		vGradientEndColor = buttonColor.brighter();
    		vPaint = new GradientPaint(0,inset+vHighlightInset,vGradientStartColor,0,inset+vHighlightInset+(vButtonHighlightHeight/2), buttonColor.brighter(), false);
     
    		// Paint the second layer of the button
    		g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,.8f));
    		g2d.setPaint(vPaint);
     
    		g2d.fillRoundRect(inset+vHighlightInset,inset+vHighlightInset,vButtonHighlightWidth,vButtonHighlightHeight,vHighlightArcSize,vHighlightArcSize);
     
    		RoundRectangle2D.Float r2d =new RoundRectangle2D.Float(inset, inset, vButtonWidth, vButtonHeight, vArcSize, vArcSize);
    		g2d.clip(r2d);		
    		g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1.0f));
    		super.paintComponent(g);
     
    		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
    	}
    }

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Sans pouvoir pointer ce qui pose exactement problème, plusieurs remarques:

    1) tu bidouille ton Graphics (nottement avec un appel à clip) avant de la passer à la sous routine, ça peux perturber la sous routine paintComponent qui serait prévue pour un graphics dans l'état d'origine. Pour jouer sur le Graphics, il vaut mieux faire:
    Graphics2D g2d = (Graphics2D) g.create(); // on travaille avec une copie

    2) ton super.paintComponent() est à la fin, d'habitue on le met au début

    3) swing utilise des look and feel pour faire le dessin, il est préférable de te baser dessus en étendant BasicButtonUI et en l'appliquant à tes JCoolButton.

    4) il existe pas mal de lookandfeel customizable sur le marché pour faire ce que tu veux faire sans besoin de code et s'appliquant à des JButton standards

    Dernier détails, au niveau de la gestion de la transparences partielle et des effets composites, certaines jvm sur certains OS on eu des soucis à une époque. Tu peux essayer les paramètres suivants pour java


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -Dsun.java2d.d3d=false
    -Dsun.java2d.ddoffscreen=false
    -Dsun.java2d.noddraw=true

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/02/2015, 10h47
  2. [Formulaire] champ qui dépend d'un autre
    Par atlantideD dans le forum IHM
    Réponses: 1
    Dernier message: 23/04/2007, 15h09
  3. Recouvrement en Java + Affichage XML
    Par Zaitchev dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 26/05/2006, 08h55
  4. [Visual Web] [Sun Java Studio] Qui a essayé ?
    Par -COil- dans le forum NetBeans
    Réponses: 3
    Dernier message: 05/05/2004, 22h52
  5. [STRUTS] [JAVA] Affichage conditionnel de bean:write
    Par babylone7 dans le forum Struts 1
    Réponses: 6
    Dernier message: 29/04/2004, 16h20

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