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 :

[SWING]Dessiner sur un composant


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut [SWING]Dessiner sur un composant
    Bonjour a tous, voilà j'ai un pt souci. J'aimerai faire une barre de défilement temporel (j'utilise une JProgressBar pr ca), et sur cette progressbar, j'aimerai dessiner des traits verticaux symbolisant des sortes de clé.

    Hors je ne sais pas comment faire, j'ai redéfini la méthode paint, mais il me trace un train au dessus de la barre, alors que j'ai bien préciser les bonnes coordonnée grace a la méthode getLocation() du composant JProgressBar.

    Donc ma question est : Comment déssiner des traits sur mon composant.

    Merci pr votre aide.

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Qui donc te trace un train au dessus de la barre ??
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    non je veux pas déssiner un trait audessus, mais perpendiculaire a ma barre, mais au dessus de ma barre.

    ca c'est que j'ai



    et ca c'est ce que je veux :



    avec un drawline je pense que c'est faisable. et que que mes traits restent visible meme qd la barre sera à 100% ?

    merci

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il te suffit de créer un classe héritant de JProgressBar et redéfinisssant la méthode paintComponent de la fa_on suivante (imaginons que tu veuilles des traits tous les 10%):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    protected void paintComponent(Graphics g) {
       //on dessine la JProgressBar
       super.paintComponent(g);
       if(this.isShowing()) {
          //on dessine les barres
          int h = this.getHeight();
          int l = this.getWidth();
          int segmentLength = l/10;
          for(int i = 1; i<=9; i++) {
             g.drawLine(segmentLength * i,0,segmentLength * i , height);
          }
       }
    }
    Et voiloù (bon le code n'est pas testé mais ça devrait marcher plus ou moins correctement).

    En ce qui concerne l'apparence de tes traits il serait pas mal d'aller voir tu coté de la classe Graphics2D, en utilisant des Line2D, des BasicStrokes et des TexturePaint ou GradientPaint...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    oki merci pr ton aide, je vais tester ca !!

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Ca marche, mais apres discuter avec mon tuteur de stage, c'est plus ca :



    qu'il faudrai arriver a faire.

    J'ai regardé sur google s'il éxistait des composant type multimédia, mais je n'ai rien trouvé. alors avez vous une idée de comme faire ?? (la gestion du volume est pas necessaire, ce que je veux vraiment c'est la barre de défilement et le curseur)

    encore merci.

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah c'es plus une JProgressBar mais un JSlider que tu veux
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    le JSlider irai au niveau de son comportement, mais est il possible de redéfinir tout le graphisme, comme le pointeur, ou la hauteur de la rampe de slide ?

    (je sais je suis pénible avec mes questions ^^)

    merci d'avance.

  9. #9
    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 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Oui mais tu ne vas pas aimer : il te faut definir ta propre apparence de JSlider. Je t'invite a regarder du cote de javax.swing.plaf.basic.BasicSliderUI (dans le fichier src.zip present sur la racine du JDK) pour voir le code de l'apparence par defaut des JSlider (qui n'est pas le meme que l'apparence Windows, Metal/Ocean, GTK...).

    Note : une UI (ou UIDelegate) gere a la fois l'apparence ET le comportement (d'ou le code tres long).

    En redefinissant ta propre UI, tu peux dessiner le curseur ou la rampe comme bon te semble (mais ca va quand meme te demander pas mal de travail et/ou de tests). Recherche quand meme s'il n'existe pas des libs toutes faites permettant directement de changer l'apparence de leur slider auparavant.
    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

  10. #10
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Oki je vais chercher de ce coté là, pour les sources est-ce que je peux les trouver ailleurs que dans le repertoire du JDK car bossant sous MacOS ce n'est pas le JDK de Sun que j'ai mais celui d'Apple.

    merci bien pr votre aide.

  11. #11
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Cadeau:
    Fichiers attachés Fichiers attachés
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  12. #12
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    je suis totalement paumé....

    voulant redéfinir le graphisme du JSlider, je me crée une nouvelle classe dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    package timeline;
    import javax.swing.JComponent;
    import javax.swing.plaf.basic.*;
    import javax.swing.plaf.basic.BasicSliderUI;
    import javax.swing.JSlider;
     
    public class mySliderUI extends BasicSliderUI{
     
        public mySliderUI(JSlider b) {
            super(b);
        }  
    }
    je ne fais rien de plus que d'étendre simplement la classe BasicSliderUI

    mon code de test

    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
     
    package timeline;
     
    import javax.swing.JSlider;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.plaf.basic.*;
     
    public class testSlider extends javax.swing.JFrame {
     
        public testSlider() {
            initComponents();
     
            try{
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
     
            }catch (UnsupportedLookAndFeelException e) {
                // handle exception
            } catch (ClassNotFoundException e) {
                // handle exception
            } catch (InstantiationException e) {
                // handle exception
            } catch (IllegalAccessException e) {
                // handle exception
            }
            JSlider slider = new JSlider(JSlider.HORIZONTAL);
     
            slider.setUI(new mySliderUI(slider));
            slider.setSize(350,30);
            slider.setLocation(30,10);
            System.out.println(slider.getUIClassID());
            System.out.println(slider.getUI().toString());
            this.getContentPane().add(slider);
            slider.repaint();
        }
    seulement je me retrouve avec un Look&Feel de type Windows95 au lieu d'avoir le L&F Systeme c'est a dire Aqua (MacOSX).

    J'avoue je ne comprend pas du tout ce qui se passe....voyez qqchose que je vois pas ?? (surement a mon avis). Est ce que je fais qqchose mal ?

    encore merci

  13. #13
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est normal, la BasicSliderUI, est, comment dire.... Basique.

    C'était juste pour de donner une idée sur un moyen existant pour redéfinir l'apparence d'un composant.

    Donc à toi de faire le look et le feel qui te plaisent (il faut redéfinir la plupart des méthodes de la SliderUI pour çà)...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  14. #14
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    oki, je comprend, c'est pour ca que le BasicSliderUI me donne un L&F type W95, a moi de redéfinir les méthodes paintThumb, paintTrack etc..etc..pour avoir un composant avec les couleurs et les formes que je veux..


    Et ben on va s'amuser

  15. #15
    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 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Hehe tu avais ete prevenu .

    Note: en cas de fond gris uni, et pour retrouver le fond strie de MacOS, il faudra la mettre en non-opaque (si ce n'est pas deja fait) histoire d'afficher le fond du panel qui se trouve dessous.
    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

  16. #16
    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 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Alors j'ai demande a un copain de faire quelques tests sur son Mac, l'UI Aqua des sliders est apple.laf.AquaSliderUI et en utilisant sa signature :

    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
    >javap class apple.laf.AquaSliderUI
    Compiled from "AquaSliderUI.java"
    public class apple.laf.AquaSliderUI extends javax.swing.plaf.basic.BasicSliderUI{
        static apple.awt.CImage sThumbRoundImage;
        static apple.awt.CImage sThumbPointingImage;
        static apple.awt.CImage sThumbRoundSmallImage;
        static apple.awt.CImage sThumbPointingSmallImage;
        protected transient boolean fIsDragging;
        static int kTickWidth;
        static int kTickLength;
        public static void initImages();
        public static javax.swing.plaf.ComponentUI createUI(javax.swing.JComponent);
        public apple.laf.AquaSliderUI(javax.swing.JSlider);
        public void installUI(javax.swing.JComponent);
        protected javax.swing.plaf.basic.BasicSliderUI$TrackListener createTrackListener(javax.swing.JSlider);
        protected java.beans.PropertyChangeListener createPropertyChangeListener(javax.swing.JSlider);
        public void paint(java.awt.Graphics, javax.swing.JComponent);
        public void paintTrack(java.awt.Graphics);
        public void paintThumb(java.awt.Graphics);
        public void paintLabels(java.awt.Graphics);
        public void superPaintTicks(java.awt.Graphics);
        public void paintTicks(java.awt.Graphics);
        public void paintFocus(java.awt.Graphics);
        protected void calculateContentRect();
        protected void calculateThumbLocation();
        protected void calculateThumbSize();
        protected boolean shouldUseArrowThumb();
        protected java.awt.Dimension getThumbSize();
        protected void calculateTrackRect();
        protected void calculateTickRect();
        public javax.swing.BoundedRangeModel getModel();
        public boolean isEnabled();
        public int getOrientation();
        public java.lang.Object getClientProperty(java.lang.Object);
        public javax.swing.JComponent getComponent();
        public byte getTrackHighlight();
        public java.awt.Dimension getPreferredHorizontalSize();
        public java.awt.Dimension getPreferredVerticalSize();
        protected javax.swing.event.ChangeListener createChangeListener(javax.swing.JSlider);
        int getScale();
        javax.swing.JSlider _slider();
        java.awt.Rectangle _thumbRect();
        java.awt.Rectangle _contentRect();
        static javax.swing.JSlider access$000(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$100(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$200(apple.laf.AquaSliderUI);
        static javax.swing.Timer access$300(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$400(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$500(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$600(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$700(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$800(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$900(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$1000(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$1100(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$1200(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$1300(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$1400(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$1500(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$1600(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$1700(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$1800(apple.laf.AquaSliderUI);
        static boolean access$1900(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$2000(apple.laf.AquaSliderUI);
        static boolean access$2100(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$2200(apple.laf.AquaSliderUI);
        static boolean access$2300(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$2400(apple.laf.AquaSliderUI);
        static boolean access$2500(apple.laf.AquaSliderUI);
        static void access$2600(apple.laf.AquaSliderUI, int);
        static java.awt.Rectangle access$2700(apple.laf.AquaSliderUI);
        static javax.swing.Timer access$2800(apple.laf.AquaSliderUI);
        static javax.swing.plaf.basic.BasicSliderUI$ScrollListener access$2900(apple.laf.AquaSliderUI);
        static javax.swing.Timer access$3000(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$3100(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$3200(apple.laf.AquaSliderUI);
        static boolean access$3300(apple.laf.AquaSliderUI);
        static boolean access$3400(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$3500(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$3600(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$3700(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$3800(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$3900(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$4000(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$4100(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$4200(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$4300(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$4400(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$4500(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$4600(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$4700(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$4800(apple.laf.AquaSliderUI);
        static int access$4900(apple.laf.AquaSliderUI, int);
        static boolean access$5000(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$5100(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$5200(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$5300(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$5400(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$5500(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$5600(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$5700(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$5800(apple.laf.AquaSliderUI);
        static int access$5900(apple.laf.AquaSliderUI, int);
        static boolean access$6000(apple.laf.AquaSliderUI);
        static java.awt.Rectangle access$6100(apple.laf.AquaSliderUI);
        static javax.swing.JSlider access$6200(apple.laf.AquaSliderUI);
        static {};
    }
    Donc si jamais ton programme n'est jamais sense fonctionner que sur Mac tu peux essayer d'utiliser l'UI Aqua (en heritage ou alors en delegation si jamais elle est finale). Mais evidement si Apple ne documente pas cette classe, elle peut evoluer/changer/disparaitre dans les versions futures. De plus ton code n'est evidement plus alors portable.

    EDIT - un truc interressant a tester et qui serait au final bien plus portable est de creer une SliderUI qui etend SliderUI ou BasicSliderUI et qui prend en parametre l'UI precedente du JSlider... ce qui permettrait de lui deleger tout le travail de rendu et de comportement, ta classe a toi ne s'occupant plus que du rendu des lignes verticales en surchageant :

    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
     
    class MySliderUI extends SliderUI {
      private BasicSliderUI delegate;
     
      public MySliderUI(JSlider slider) {
        // TO BE TESTED on various platforms !!!
        delegate = (BasicSliderUI)slider.getUI();
      }
     
      /** @inheritDoc
       */
      @Override void paintTrack(Graphics g)  {
        delegate.paintTrack(g);
        // Draw lines (vertical when slider is horizontal, horizontal when slider is vertical).
        [...]
      }
     
      // ! Redirect ALL public methods from SliderUI to the delegate.
     
      [...]
    }
    A voir si c'est faisable.
    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

  17. #17
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    je suis en train d'essaier de prendre en main graphics2D

    et j'aimerai savoir si ya moyen de faire un effet de flou non pas du une image, mais sur une figure (Shape)




    en gros je voudrai que mon cercle cyan claire fasse un peu comme le halo autour du curseur du slider a la facon mac os.


    merci de votre aide (encore et tjrs !!)

  18. #18
    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 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Gfx ! T'es ou ? y a une question graphisme sur Mac.

    Bon pour ce que j'en sais a mon niveau, tu peux faire du flou via la classe Kernel et ConvolveOp. Manque de bol ce la suppose que tu manipules un Raster ou une BufferedImage, tu ne peux donc pas faire ca au vol sur le graphics de l'ecran mais sur des images intermediaires.

    Voici un exemple de flou : http://www.exampledepot.com/egs/java...ImageConv.html

    Faire des recherches sur le net pour savoir comment faire un flou gaussien. Voir egalement si le JAI (Java advanced imaging) chez Sun ne prend pas en charge ce genre de choses.

    Notes :
    - tu peux mettre des indices de rendu sur ton cercles pour adoucir ses contours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((Graphics2D)graphics).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    - avec Java 6 (qui n'est pour l'instant toujours pas dispo en version finale sur Mac) tu peux utiliser des gradients circulaires avec plusieurs couleurs (dont la couleur transparente) pour contourner le probleme.
    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

  19. #19
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Mouaip en jouant avec un RadialGradientPaint (et une couleur traparente sur la fin) et une ConvolveOp on peut atteindre ce genre de choses, enfin même avec une RadialGradientPaint toute seule mais c'est y'à un peu moins de cachet:

    Avec seulement un RadialGradientPaint:



    Avec le blur en plus:



    Donc pas de grande différence fondamentale...

    Niveau code:

    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
     
            BufferedImage haloImage = new BufferedImage(2*100,2*100,BufferedImage.TYPE_INT_ARGB);
     
            Graphics2D haloGraphics = haloImage.createGraphics();
            haloGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            float[] fractions = {0.7999f,0.8f,1f};
            Color[] colors = {new Color(141,178,209),new Color(141,178,209,255),new Color(255,255,255,0)};
            RadialGradientPaint paint = new RadialGradientPaint(2*50,2*50,2*45,fractions,colors);
     
            haloGraphics.setPaint(paint);
            haloGraphics.fill(new Rectangle2D.Double(0,0,haloImage.getWidth(),haloImage.getHeight()));
            haloGraphics.setPaint(Color.BLUE);
            haloGraphics.fill(new Ellipse2D.Double(2*15,2*15,2*70,2*70));
            haloGraphics.dispose();
     
            Kernel kernel = new Kernel(3, 3,
                    new float[] {
                        1f/9f, 1f/9f, 1f/9f,
                        1f/9f, 1f/9f, 1f/9f,
                        1f/9f, 1f/9f, 1f/9f});
            BufferedImageOp op = new ConvolveOp(kernel);
            haloImage = op.filter(haloImage, null);
     
            return haloImage;
    Puis il te suffit de dessinner l'imàge obtenue à l'endroit voulu dans ton UIDelegate.

    J'oubliais RadialGradientPaint => java 6 only, sinon il faut passer par la librairie Batik
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  20. #20
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Merci ca ma bien aider tout ca!!


    maitenant la cerise sur la gateau, j'ai besoin de faire une frame avec des coins arrondis....histoire de rendre tt ca plus agréable

    architecture de ma JFrame :

    JFrame
    - JPanel
    - Tout mon barda



    avec un effet de transparence du plus bel effet (et multiplateforme en plus, enfin j'ai pas encore testé sous Xp, mais sous MacOS ca marche)

    j'aimerai avoir des bords arrondi sur ma JFrame, JPanel.

    Encore et tjrs merci ^^

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/05/2010, 16h39
  2. Dessiner sur un composant
    Par Panaméen dans le forum Windows Forms
    Réponses: 9
    Dernier message: 18/05/2009, 14h08
  3. Dessiner sur un composant sans Canvas
    Par josse95 dans le forum C++Builder
    Réponses: 10
    Dernier message: 31/03/2007, 19h01
  4. Dessiner sur un composant sans Canvas
    Par bandit boy dans le forum C++Builder
    Réponses: 6
    Dernier message: 08/02/2007, 13h12
  5. dessiner sur un composant picturebox
    Par xantares dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 03/01/2007, 12h05

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