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 :

Problème de paint avec un composant personnalisé


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut Problème de paint avec un composant personnalisé
    Bonjour

    je viens vous demander votre aide pour un petit souci de composants swing personnalisés.

    Je suis en train de faire quelques tests pour un look d'application un peu plus personnalisé et pour ce faire j'ai créé un composant JImage (extends Jpanel ) ou je peint des images.

    Dans le constructeur je charge une BufferedImage avec ImageIO.read(File)

    J'ai overloadé la méthode paintComponant(Graphics g) de ce composant où je
    créé une BufferedImage de la taille du composant, je fais du dessin G2D pour peindre l'image originale dedans ( la placer à un endroit défini, répéter l'image ou le dernier pixel dans un certain sens en fonction du placement ... )
    Puis je peint cette BufferedImage générée dans le graphics g;

    Je suis obligé de passer par cette BufferedImage car j'utilise un appel JNA pour créer des fenêtres transparentes, je met des images png avec des coins arrondis et une ombre portée translucente


    et si je peint directement dans le graphics le composant ne prends pas la couche inférieure et je me retrouve avec des bouts de zones transparentes un peu partout, je règlerait ce problème plus tard

    Mon plus gros soucis est que chaque composant peint celui du dessous qui peint celui d'à côté ...
    Au final la consomation CPU est de 100% et l'affichage peine un peu

    Pour mieux comprendre voici un exemple :


    Ma fenêtre est composée de 9 zones : les 4 coins, les 4 bordures et une zone centrale ( en vert sur l'image ) avec des boutons et une autre zone ( en orange ) composée de 9 composants ( coins ... )

    si je passe la souris sur un des boutons, il va être repeint, ce qui va appeler la méthode paint du composant inférieur ( zone rouge ), qui va peindre les composants à côté de lui pour finalement repeindre la fenêtre entière

    Je le sais car j'ai mis des affichages console dans la méthode paintComponent de ma classe qui affiche quel composant est peint à tel instant

    donc sur l'image suivante, du rouge le plus opaque au plus tranparent, on voit la propagation des appels a la méthode paint


    Quel idée me proposez vous pour bloquer cette propagation d'appels de paint ?
    Peut on retrouver la graphics correspondant à la fenêtre à l'instant d'avant et juste repeindre la zone concernée sans être obligé de repeindre la fenêtre entière ?

    Merci d'avance pour votre aide

    Yann

  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 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    Quelques astuces en vrac :
    • Depuis java 1.6.0_10 tu peux directement faire des fenetres non decoree et transparentes en appelant l'API com.sun.awt.AWTUtilities . Cette API devrait devenir standard dans Java 7.
      Faire des fenetres non-decorees etait possible avant mais resultait en en rectangle gris. Si tu comptes distribuer ton application via JavaWebStart, tu peux specifier la version minimale de la JVM necessaire a l'execution.


      Une maniere portable de faire est de te creer une classe perso s'appellant AWTUtilities qui via la reflection appelle soit com.sun.awt.AWTUtilities quand cette derniere est presente soit JNA quand ce n'est pas le cas ou que tu es sur une platforme ne disposant pas de l'API proprio de Sun (MacOS ?).
    • Une fois une image chargee avec ImageIO il faut toutefois la convertir en image compatible pour avoir un maximum de performance :
      Comment utiliser des images compatibles pour améliorer les performances et le rendu ?
      C'est pareil quand tu crees de nouvelles images destinees a etre affichees a l'ecran.



    J'ai overloadé la méthode paintComponant(Graphics g) de ce composant où je
    créé une BufferedImage de la taille du composant, je fais du dessin G2D pour peindre l'image originale dedans ( la placer à un endroit défini, répéter l'image ou le dernier pixel dans un certain sens en fonction du placement ... )
    Puis je peint cette BufferedImage générée dans le graphics g;
    On a pas le code de ton rendu mais faudrai eviter de creer de nouvelles images a chaque nouvel affichage...
    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
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par bouye Voir le message
    Depuis java 1.6.0_10 tu peux directement faire des fenetres non decoree et transparentes en appelant l'API com.sun.awt.AWTUtilities . Cette API devrait devenir standard dans Java 7.
    Juste pour info on retrouve déjà cette API dans les pre-release de Java 7, ainsi que dans la javadoc correspondante du site de Sun.
    La classe Window possède désormais des getter/setter pour modifié l'opacity et la shape, et la méthode setBackground() a été modifié afin de gérer la composante alpha des couleurs (pour les effets de transparence).

    a++

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    Bonjour

    merci pour ta réponse,

    - je n'arrive pas a faire marcher awtutilities, j'ai toujours mes arrondis mais en dessous j'ai un rectangle blanc qui gâche tout
    j'ai essayé ceci dans mon main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                    MainWindow mw = new MainWindow();
                    mw.getRootPane().setBackground(new Color(0,0,0,0));
                    com.sun.awt.AWTUtilities.setWindowOpaque(mw, false);
                    com.sun.awt.AWTUtilities.setWindowOpacity(mw, 0.5f);
                    mw.pack();
                    mw.setVisible(true);
    aussi ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    mw.setBackground(new Color(0,0,0,0));
                    mw.getRootPane().setBackground(new Color(0,0,0,0));
                    mw.getContentPane().setBackground(new Color(0,0,0,0));
    mais il ne veut toujours pas,

    avez vous une solution ?

    On a pas le code de ton rendu mais faudrai eviter de creer de nouvelles images a chaque nouvel affichage...
    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
     
        @Override
        public void paintComponent(Graphics g) {
            try {
                System.err.print("PAINTCOMPONENT : " + this.getName());
                if (!initialize() || getWidth() <= 0 || getHeight() <= 0) {
                    return;
                }
     
                /*
                 if(this.getWidth() == oldWidth && this.getHeight() == oldHeight) {
                    System.err.println(" > sauv");
                    g.drawImage(imgOutBuffer, 0, 0, this);
                    count = 0;
                }
                 */
                else {
                    System.err.println(" > paint");
                    imgOutBuffer = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_ARGB);
                    g2d = imgOutBuffer.createGraphics();
                    paintAlignment();
                    paintXRepeat();
                    paintYRepeat();
                    g.drawImage(imgOutBuffer, 0, 0, this);
                    g2d.dispose();
     
                    oldWidth = this.getWidth();
                    oldHeight = this.getHeight();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
     
        protected void paintAlignment() throws Exception {
            int sx1 = 0, sx2 = 0, sy1 = 0, sy2 = 0;
            int dx1 = 0, dx2 = 0, dy1 = 0, dy2 = 0;
            DimensionComparison widthComparaison;
            DimensionComparison heightComparaison;
     
            if 
    ...
    else
    ...
    for( ...
     
     
            g2d.drawImage(imgBuffer, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);
        }
    Quand je fais ça, java peint l'image générée par dessus le graphics
    Alors que quand je fais

    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
     
        @Override
        public void paintComponent(Graphics g) {
            try {
                System.err.print("PAINTCOMPONENT : " + this.getName());
                if (!initialize() || getWidth() <= 0 || getHeight() <= 0) {
                    return;
                }
     
                /*
                 if(this.getWidth() == oldWidth && this.getHeight() == oldHeight) {
                    System.err.println(" > sauv");
                    g.drawImage(imgOutBuffer, 0, 0, this);
                    count = 0;
                }
                 */
                else {
                    System.err.println(" > paint");
                    g2d = (Graphics2D)g;
                    paintAlignment();
                    paintXRepeat();
                    paintYRepeat();
     
                    oldWidth = this.getWidth();
                    oldHeight = this.getHeight();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    il oublie par moment de repeindre certains endroits quand par exemple je passe sur les boutons



    mais dans la console je voie bien
    ...
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame02 > ok
    PAINTCOMPONENT : imgFrame05 > ok
    PAINTCOMPONENT : imgFrame05 > ok
    (les boutons vista sont dans imgFrame02 et les boutons classiques dans imgFrame05 )

    what happens ???

  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 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    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
     
    private boolean forceRefresh = true;
     
    //Dans le contructeur.
    setOpaque(false);
     
     
    [...]
     
    int width = getWidth():
    int height = getHeight();
    // Image recrée uniquement si on en a besoin.
    if (imgOutBuffer == null || imgOutBuffergetWidth() != width || image.getHeight() != height) {
        imgOutBuffer = <créer une image transparente compatible>
        forceRefresh = true;
    }
    if (forceRefresh) {
        // Ne pas garder de référeces sur ce graphics.
        Graphics2D g2d = imgOutBuffer.createGraphics();
        try {
            // Vidage du contenu préexistant de l'image.
            g2d.setColor(Color.Black);
            g2d.fillRect(0, 0 witdh, height);
            g2d.setComposite(AlphaComposite.SrcIn);
            g2d.setColor(new Color(0, 0, 0, 0));
            g2d.fillRect(0, 0 witdh, height);
            g2d.setComposite(AlphaComposite.SrcOver);
            //
            paintAlignment(g2d);
            paintXRepeat(g2d);
            paintYRepeat(g2d);
            forceRefresh = false;
        }
        finally {
            g2d.dispose();  
        }
    }
    g.drawImage(imgOutBuffer, 0, 0, null); // on ne passe pas d'observateur c'est plus rapide.
    Ici on redessine l'image dans son intégralité (mais uniquement lorsque cela est nécessaire) mais dans l'absolu histoire d'aller encore plus vite il faudrait se conter de redessiner que la partie du composant qui a changée ou qui est repeinte (on connait cette zone car c'est la zone de clip du Graphics fourni à paintComponent()).

    Je me pencherai sur tes problèmes avec AWTUtilities demain, là je vais me coucher : il est tard ici.
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    Bonjour

    merci de ta réponse.
    J'ai continué à tester quelques essais en utilisant les pistes que tu m'as fourni,
    mais sans passer par une BufferedImage c'est toujours pareil,

    il arrive que certains endroits ne se redessinent pas. Je me demande si ça ne vient pas de JNA.

    Aujourd'hui j'ai un peu de temps à consacrer à la GUI donc je vais faire des traces pour déterminer à quel endroit ça bloque.

  7. #7
    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 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    Tsss je viens de me rendre compte maintenant que j'avais poste la repose dans le mauvais topic...

    Concernant AWTUtilities :

    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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package test;
     
    import java.awt.geom.Ellipse2D;
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
     
    /**
     *
     * @author user
     */
    public class Main {
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    for (AWTUtilities.Translucency translucency : AWTUtilities.Translucency.values()) {
                        System.out.printf("Supports translucency %s ?\t%b\n", translucency, AWTUtilities.isTranslucencySupported(translucency));
                        if (AWTUtilities.isTranslucencySupported(translucency)) {
                            JFrame frame = new JFrame("Test "+translucency);
                            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                            frame.setSize(500, 500);
                            switch (translucency) {
                                // Can make shaped window AND translucent window.
                                case PERPIXEL_TRANSLUCENT:
                                    frame.setUndecorated(true);
                                    AWTUtilities.setWindowOpacity(frame, 0.5f);
                                    AWTUtilities.setWindowShape(frame, new Ellipse2D.Float(0, 0, 500, 500));
                                    break;
                                // Can make shaped window.
                                case PERPIXEL_TRANSPARENT:
                                    frame.setUndecorated(true);
                                    AWTUtilities.setWindowShape(frame, new Ellipse2D.Float(0, 0, 500, 500));
                                    break;
                                // Can make translucent window.
                                case TRANSLUCENT:
                                default:
                                    AWTUtilities.setWindowOpacity(frame, 0.5f);
                            }
                            frame.setVisible(true);
                        }
                    }
                }
            });
        }
    }
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package test;
     
    import java.awt.Component;
    import java.awt.GraphicsConfiguration;
    import java.awt.Shape;
    import java.awt.Window;
    import java.lang.reflect.Method;
     
    /**
     *
     * @author user
     */
    public class AWTUtilities {
     
        private static Class AWTUTILITIES_DELEGATED_CLASS = null;
        private static Class TRANSLUCENCY_DELEGATED_CLASS = null;
        private static boolean SUPPORTS_AWTUTILITIES = false;
        private static boolean SUPPORTS_JNA = false;
     
        static {
            String version = System.getProperty("java.version");
            String[] tokens = version.split("\\.");
            int major = Integer.parseInt(tokens[0]);
            int minor = Integer.parseInt(tokens[1]);
            String awtUtilitiesClassname = null;
            if (major == 1) {
                if (minor == 6) {
                    awtUtilitiesClassname = "com.sun.awt.AWTUtilities";
                } else if (minor > 6) {
                }
            } else {
            }
            if (awtUtilitiesClassname != null) {
                String translucencyUtilitiesClassname = awtUtilitiesClassname + "$Translucency";
                try {
                    AWTUTILITIES_DELEGATED_CLASS = Class.forName(awtUtilitiesClassname);
                    TRANSLUCENCY_DELEGATED_CLASS = Class.forName(translucencyUtilitiesClassname);
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
            SUPPORTS_AWTUTILITIES = (AWTUTILITIES_DELEGATED_CLASS != null);
        }
     
        public enum Translucency {
     
            PERPIXEL_TRANSPARENT, TRANSLUCENT, PERPIXEL_TRANSLUCENT;
     
            public Object toAWT() {
                Object result = null;
                if (SUPPORTS_AWTUTILITIES) {
                    try {
                        Method method = TRANSLUCENCY_DELEGATED_CLASS.getMethod("valueOf", String.class);
                        result = method.invoke(null, this.toString());
                    } // Silently consume exception.
                    catch (Exception e) {
                    }
                }
                return result;
            }
        }
     
        public static boolean isTranslucencySupported(Translucency translucency) {
            boolean result = false;
            if (SUPPORTS_AWTUTILITIES) {
                try {
                    Method method = AWTUTILITIES_DELEGATED_CLASS.getMethod("isTranslucencySupported", TRANSLUCENCY_DELEGATED_CLASS);
                    result = (Boolean) method.invoke(null, translucency.toAWT());
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
            return result;
     
        }
     
        public static void setWindowOpacity(Window window, float opacity) {
            if (SUPPORTS_AWTUTILITIES) {
                try {
                    Method method = AWTUTILITIES_DELEGATED_CLASS.getMethod("setWindowOpacity", Window.class, float.class);
                    method.invoke(null, window, opacity);
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
        }
     
        public static float getWindowOpacity(Window window) {
            float result = 1f;
            if (SUPPORTS_AWTUTILITIES) {
                try {
                    Method method = AWTUTILITIES_DELEGATED_CLASS.getMethod("getWindowOpacity", Window.class);
                    result = (Float) method.invoke(null, window);
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
            return result;
        }
     
        public static Shape getWindowShape(Window window) {
            Shape result = null;
            if (SUPPORTS_AWTUTILITIES) {
                try {
                    Method method = AWTUTILITIES_DELEGATED_CLASS.getMethod("getWindowShape", Window.class);
                    result = (Shape) method.invoke(null, window);
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
            return result;
        }
     
        public static void setWindowShape(Window window, Shape shape) {
            if (SUPPORTS_AWTUTILITIES) {
                try {
                    Method method = AWTUTILITIES_DELEGATED_CLASS.getMethod("setWindowShape", Window.class, Shape.class);
                    method.invoke(null, window, shape);
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
        }
     
        public static void setWindowOpaque(Window window, boolean opaque) {
            if (SUPPORTS_AWTUTILITIES) {
                try {
                    Method method = AWTUTILITIES_DELEGATED_CLASS.getMethod("setWindowOpaque", Window.class, boolean.class);
                    method.invoke(null, window, opaque);
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
        }
     
        public static boolean isWindowOpaque(Window window) {
            boolean result = false;
            if (SUPPORTS_AWTUTILITIES) {
                try {
                    Method method = AWTUTILITIES_DELEGATED_CLASS.getMethod("isWindowOpaque", Window.class);
                    result = (Boolean) method.invoke(null, window);
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
            return result;
        }
     
        public static boolean isTranslucencyCapable(GraphicsConfiguration gc) {
            boolean result = false;
            if (SUPPORTS_AWTUTILITIES) {
                try {
                    Method method = AWTUTILITIES_DELEGATED_CLASS.getMethod("isTranslucencyCapable", GraphicsConfiguration.class);
                    result = (Boolean) method.invoke(null, gc);
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
            return result;
        }
     
        public static void setComponentMixingCutoutShape(Component component, Shape shape) {
            if (SUPPORTS_AWTUTILITIES) {
                try {
                    Method method = AWTUTILITIES_DELEGATED_CLASS.getMethod("setComponentMixingCutoutShape", Component.class, Shape.class);
                    method.invoke(null, component, shape);
                } // Silently consume exception.
                catch (Exception e) {
                }
            }
        }
    }
    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

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    Salut

    merci pour le code java, je testerai ça la semaine prochaine
    en ce moment je bosse sur du c++
    vive les pointeurs

Discussions similaires

  1. Problème d'enregistrement avec le composant Virtual Treeview
    Par Faith's Fall dans le forum C++Builder
    Réponses: 8
    Dernier message: 19/05/2008, 12h52
  2. Problème de mapping avec clés composées
    Par goeland444 dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/04/2008, 19h57
  3. Problème d'écriture avec les Composants UIB
    Par zoheir13 dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/01/2008, 13h32
  4. Problème de syntaxe avec le composant TCppWebBrowser
    Par Ptite Développeuse dans le forum C++Builder
    Réponses: 10
    Dernier message: 19/04/2006, 15h48
  5. Problème d'affichage avec le composant JTable
    Par vidocq dans le forum Composants
    Réponses: 2
    Dernier message: 03/04/2006, 11h22

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