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

2D Java Discussion :

Dégradé sur les jPanel - Uitlisation des classes


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut Dégradé sur les jPanel - Uitlisation des classes
    Bonjour à tous,
    je poste sur le forum Graphisme, peut etre plus adapté que sur le forum Netbeans( sinon pour les modérateurs ..message à supprimer ..merci...)

    Je souhaite mettre un dégradé sur différents jPanel que j'ai dans différentes classes de mon programme...
    Aussi plutôt que de réécrire le code dans chaque classe, j'ai pensé à créer une classe qui effectue le dégradé, et qui laquelle est récupéré par une interface de manière à pouvoir l'implémenter dans mes autres classes..
    Le problème est que je ne sait pas comment hériter de cette classe "dégradée" et ainsi permettre à mes jPanel d'avoir une couleur..
    Ci - après le code...
    Si quelqu'un pouvait me corriger ou me rectifier éventuellement dans ma démarche ...où juste me donner la manière de corriger "mon tir.."...
    En vous remerçiant par avance...

    Mon interface :

    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
     
     
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
     
    /**
     *
     * @author telemak
     */
    public interface DegradClass1 {
     
     
        void DegradClass();
     
     
     
    }

    Ma class :


    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
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JPanel;
    import patrimonial.FenTxNominalPret.*;
     
    /**
     *
     * @author telemak
     */
    public class DegradClass {
     
     
     
     
        public void paintComponent(Graphics comp) {
     
     
        Graphics2D comp2D = (Graphics2D)comp;
            comp2D.setColor(Color.blue);
     
            GradientPaint pat = new GradientPaint(0f, 0f, Color.white,
                    100f,45f,Color.blue);
            comp2D.setPaint(pat);
     
     
     
        }
     
     
    }
    Mon autre class ou je souhaites mettre un dégradé sur le jPanel :

    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
     
     
    import java.math.RoundingMode;
    import java.text.DecimalFormat;
    import javax.swing.JOptionPane;
     
    import javax.swing.JPanel;
    import patrimonial.DegradClass.*;
     
    /**
     *
     * @author telemak
     */
    public class FenTaux extends javax.swing.JFrame implements DegradClass1{
     
        DecimalFormat df = new DecimalFormat("#######.0000");
     
             //   JPanel JP1 = new JPanel();
     
               //  DegradClass DC = new DegradClass(pat);
     
     
     
     
     
     
     
        /** Creates new form FenTaux */
        public FenTaux() {
            initComponents();
     
     
           jPanel1.add(DegradClass());      <---là il ne m'accepte pas
     
     
        }
    etc..etc...

  2. #2
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,
    voici le code d'un Box dégradé que j'avais écrit il y a un bout de temps, peut être que ça t'aidera
    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
     
    import javax.swing.Box;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GradientPaint;
    import java.awt.Paint;
    import java.awt.Color;
     
    public class GradientBox extends Box
    {
    	public static final int HOR = 0;
    	public static final int VER = 1;
     
    	private int direction;
    	private Color startClr = null, endClr = null;
    	public GradientBox(int axis, Color startClr, Color endClr, int direction)
    	{
    		super(axis);
    		this.startClr = startClr;
    		this.endClr = endClr;
    		this.direction = direction;
    	}
    	public GradientBox(int axis, Color startClr, Color endClr)
    	{
    		this(axis, startClr, endClr, VER);
    	}
    	public void paintComponent(Graphics g)
    	{
    		Graphics2D g2 = (Graphics2D)g;
    		Paint old = g2.getPaint();
    		GradientPaint grad = null;
    		if (direction == VER) 
    			grad = new GradientPaint(0, 0, startClr, 0, getHeight(), endClr);
    		else 
    			grad = new GradientPaint(0, 0, startClr, getWidth(), 0, endClr);
    		g2.setPaint(grad);
    		g2.fillRect(0, 0, getWidth(), getHeight());
    		g2.setPaint(old);
    		super.paintComponent(g);
    	}
    }

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour faire de l'héritage, dans ton cas, le plus simple serait de créer un JPanel dessinant le fond dégradé puis d'hériter ou utiliser ce dégradé dans tes fenetre. Ton code est... curieux, la méthode dans l'interface est protégée, ne prend pas de paramètre et ne retourne rien, ca limite fortement son utilité, ta classe DegradClass n'hérite pas de JComponent au minimum -> ne peux pas etre ajouté à un panel.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Pour faire un JPanel (ou tout autre composant) avec un degrade qui s'applique a la taille de ce composant :

    - on le met en non-opaque avec une couleur de fond transparence (0, 0, 0, 0).

    - on lui ajoute un ComponentListener.

    - quand on recoit componentResized(), on recalcule les points du gradient en fonctions des anciennes limites et de la nouvelle taille du composant.

    - on appelle repaint().

    - dans paintComponent() on remplit toute la surface avec le gradient et on appelle apres super.paintComponent().

    Les solutions alternatives :

    - dans SwingX : utiliser un JXPanel avec un Painter heritant, par exemple d'AbstractPainter<T>en background painter.

    - dans javaFX : creer un rectangle avec en fill un LinearGradientPaint qui a proportional a true.
    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

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut
    Salut,
    Déjà merci à vous tous pour vos post...

    à herch merci pour ton code de dégradé, je vais m'en inspirer, mais je pense que je risque d'y revenir dessus....

    pour faire de l'héritage, dans ton cas, le plus simple serait de créer un JPanel dessinant le fond dégradé puis d'hériter ou utiliser ce dégradé dans tes fenetre. Ton code est... curieux, la méthode dans l'interface est protégée
    Oui effectivement j'en conviens concernant la bizarrerie du code..
    En fait je voulais essentiellement tester la partie héritage d'une classe..J'ai un peu cherché sur le forum java par rapport aux différents post..et j'ai commencé à entrevoir cette subtilité entre class interface, les extends etc.... Bon j'ai commencé...

    la méthode dans l'interface est protégée
    Là je ne sait pas trop ce que tu veuts dire par protégé...car mon but n'est pas de protéger du code ou de le rendre inaccessible..
    Le fait d'avoir crée une interface était justement pour obtenir un héritage multiple...
    J'appelle celà un héritage multiple mais pardonnez moi si ce n'est pas la bonne expression..ou le bon terme...
    Car si j'ai bien compris, l'héritage multiple n'est pas ou ne serait pas un des point fort de java..(d'après ce que j'ai cru comprendre par différent post..ou alors j'ai peut être mal compris..)
    En tous les cas on ne peuts pas faire . " extends jForm extends jPanel extends DegradeClass...etc.. (du moins si j'ai bien compris..)

    le plus simple serait de créer un JPanel
    Le problème est que j'utilise Netbeans et mon programme comprend différents packtages qui peuvent on va dire s'appeler entre-eux..
    Il y a dans ce programme différents menus qui font donc appel à différentes jForm et qui ont également différents jPanel, différents jBouton, etc..etc..
    Ces forms ont été crées à l'aide de matiss, donc je ne pense pas que ce soit une bonne chose pour moi de supprimer ces différents jpanel, jbouton, et de les recréer par code...le travail serait plus long pour moi ( mais je suis d'accord question de choix...)

    Aussi ai-je pensé à créer une classe de dégradée que je souhaite appliquer à des jPanel de mes packetages, mais pas forcément à tous les jPanels...
    Je souhaites également créer une classe qui va par exemple appliquer des effets sur mes boutons ou certains de mes boutons..
    Etc...

    Et c'est là ou finalement j'en reviens à ce que j'ai indiqué plus haut: ne pas avoir la possiblité de faire des extends de extends avec encore extends..etc.. pour faire de l'héritage de classes..

    Aussi je me suis posé la question si je pouvais contourner le problème en utilisant l'interface de cette manière ( attention ne pas tenir compte du code..c'est juste pour schématiser..)

    Mon interface :
    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
     
    Code :
     
     
     
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
     
    /**
     *
     * @author telemak
     */
    public interface DegradClass1 {
     
     
        void DegradPanelClass();          <----
        void DegradBoutonClass();        <----
        void DegradTextClass();            <---
     
     
     
    }
    Ma class pour le dégradé panel:
    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
     
     
    Code :
     
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JPanel;
    import patrimonial.FenTxNominalPret.*;
     
    /**
     *
     * @author telemak
     */
    public class DegradClass {
     
     
     
     
        public void paintComponent(Graphics comp) {
     
     
        Graphics2D comp2D = (Graphics2D)comp;
            comp2D.setColor(Color.blue);
     
            GradientPaint pat = new GradientPaint(0f, 0f, Color.white,
                    100f,45f,Color.blue);
            comp2D.setPaint(pat);
     
     
     
        }
     
     
    }

    Ma classe pour le dégradé bouton :

    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
     
     
    Code :
     
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JPanel;
    import patrimonial.FenTxNominalPret.*;
     
    /**
     *
     * @author telemak
     */
    public class DegradBoutonClass {
     
     
     
     
        public void paintComponent(Graphics comp) {
     
     
        Graphics2D comp2D = (Graphics2D)comp;
            comp2D.setColor(Color.blue);
     
            GradientPaint pat = new GradientPaint(0f, 0f, Color.white,
                    100f,45f,Color.blue);
            comp2D.setPaint(pat);
     
     
     
        }
     
     
    }
    Ma classe pour le dégradé texte :

    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
     
     
    Code :
     
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JPanel;
    import patrimonial.FenTxNominalPret.*;
     
    /**
     *
     * @author telemak
     */
    public class DegradTextClass {
     
     
     
     
        public void paintComponent(Graphics comp) {
     
     
        Graphics2D comp2D = (Graphics2D)comp;
            comp2D.setColor(Color.blue);
     
            GradientPaint pat = new GradientPaint(0f, 0f, Color.white,
                    100f,45f,Color.blue);
            comp2D.setPaint(pat);
     
     
     
        }
     
     
    }

    et enfin la classe de mon packetage ou je récupère l'interface qui hérite de mes classes :
    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
    Mon autre class ou je souhaites mettre un dégradé sur le jPanel :
    
    Code :
    
     
     
    import java.math.RoundingMode;
    import java.text.DecimalFormat;
    import javax.swing.JOptionPane;
     
    import javax.swing.JPanel;
    import patrimonial.DegradClass.*;
     
    /**
     *
     * @author telemak
     */
    public class FenTaux extends javax.swing.JFrame implements DegradClass1{
     
        DecimalFormat df = new DecimalFormat("#######.0000");
     
             //   JPanel JP1 = new JPanel();
                 
               //  DegradClass DC = new DegradClass(pat);
         
     
     
     
       
        
     
        /** Creates new form FenTaux */
        public FenTaux() {
            initComponents();
     
           
           jPanel1.add(DegradPanelClass());      <--- là par exemple je récupère l'héritage de ma 
                                                               classe pour le panel...
    
          jBouton1.add(DegradBoutonClass();     <-- là par exemple je récupère l'héritage de  ma  classe pour le bouton
    
          jText1.add(DegradTextClass();         <-- là par exmple je récupère l'héritage de ma classe pour le texte
     
        }
    etc..etc...
    Ps : je me répète, ne pas tenir compte du code qui n'est pas bon...c'est juste du copier/coller...Je posterais un nouveau pour le code des couleurs ou graphics etc...


    Voilà ....Suis-je faux ou sinon comment appliquer la méthode de récupérer de mes classes par rapport aux jPanel..jBouton etc...
    J'ai fait un " jPanel.add(DegradPanelClass).... mais ça ne passe pas..?


    En tous les cas merci pour vos post...et désolé pour la lourdeur...
    a+

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           jPanel1.add(DegradPanelClass());      <--- là par exemple je récupère l'héritage de ma 
                                                               classe pour le panel...
     
          jBouton1.add(DegradBoutonClass();     <-- là par exemple je récupère l'héritage de  ma  classe pour le bouton
     
          jText1.add(DegradTextClass();         <-- là par exmple je récupère l'héritage de ma classe pour le texte
    t'essaie de faire quoi avec ces "add"?

    Pour faire un add sur un JComponent, faut lui passer en argument une instance d'une classe qui étends JComponent pour commencer. Tes classes DegradxxxxxClass n'étendent pas JComponent. De plus, on dirait que tu confond une interface (qui ne contient qu'un contrat d'implémentation, sans rien derrière) les méthodes et les constructeurs.

    Une ligne comme ça par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jText1.add(DegradTextClass();
    n'a aucun sens. Cette méthode DegradTextClass() n'est implémentée nulle part dans ta classe FenTaux (faudrait commencer par les écrire). En plus tu donne a tes méthodes les même nom que des classes, et ça peut préter à confusion. Pour empirer les chose tu bafoure joyeusement la pluspart des convention de codage java, rien de catastrophique pour le compilateur, mais un bonne migraine pour ceux qui essaient de suivre ton code

    Au bout de tout ça et avec tes commentaires, j'ai un peu l'impression que tu met la charrue avant les boeuf. T'essaie de customiser en profondeur des composant système de java, sans avoir métrisé le b.a.ba du language (les méthode, l'héritage, les interfaces). Il faudrait peut eter commencer plus simple pour arriver à dépatouiller tout çà

Discussions similaires

  1. Foreach sur les membres d'une classe
    Par titan_33 dans le forum C#
    Réponses: 10
    Dernier message: 16/04/2008, 09h39
  2. Réponses: 5
    Dernier message: 06/09/2007, 09h49
  3. Réponses: 2
    Dernier message: 17/04/2007, 17h14
  4. [debutant]Question sur les Jpanels
    Par mikedavem dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 09/05/2006, 14h38
  5. [C#] Calcul sur les dates avec des DateTimePicker
    Par alizee971 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2005, 17h14

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