Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Membre du Club
    Homme Profil pro Yann
    Étudiant
    Inscrit en
    avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Nom : Homme Yann
    Localisation : France

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

    Informations forums :
    Inscription : avril 2012
    Messages : 145
    Points : 42
    Points
    42

    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
    Invité de passage
    Homme Profil pro
    Développeur Java
    Inscrit en
    octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : octobre 2012
    Messages : 3
    Points : 2
    Points
    2

    Par défaut Version Java

    as-tu la même version de java installé sur tes différents pc ?

  3. #3
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 372
    Points : 35 144
    Points
    35 144

    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.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et
    Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro Andry Aimé
    Inscrit en
    septembre 2007
    Messages
    7 092
    Détails du profil
    Informations personnelles :
    Nom : Homme Andry Aimé
    Localisation : Ile Maurice

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 092
    Points : 11 102
    Points
    11 102

    Par défaut

    Bonjour

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

    A+.

  5. #5
    Membre du Club
    Homme Profil pro Yann
    Étudiant
    Inscrit en
    avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Nom : Homme Yann
    Localisation : France

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

    Informations forums :
    Inscription : avril 2012
    Messages : 145
    Points : 42
    Points
    42

    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 Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 372
    Points : 35 144
    Points
    35 144

    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.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et
    Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.

  7. #7
    Membre du Club
    Homme Profil pro Yann
    Étudiant
    Inscrit en
    avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Nom : Homme Yann
    Localisation : France

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

    Informations forums :
    Inscription : avril 2012
    Messages : 145
    Points : 42
    Points
    42

    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 :
    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 Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 372
    Points : 35 144
    Points
    35 144

    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 :
    1
    2
    3
    -Dsun.java2d.d3d=false
    -Dsun.java2d.ddoffscreen=false
    -Dsun.java2d.noddraw=true
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et
    Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •