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] probleme affichage


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut [Swing] probleme affichage
    Salut à tous,
    J'ai un petit souci au niveau de l'affichage d'une fenetre.
    En effet, j'ai défini un classe JGraph2D héritant d'un JPanel et contenant un second JPanel puis une classe de Test afin de vérifier mon résultat.
    Cependant, lorsque je lance mon application, je peux observer un bandeau transparent entre le bord de ma JFrame et le second JPanel contenu dans le JGraph2D.
    Je pense que je dois me perdre dans la redéfinition des méthodes paint(Graphics g), paintComponents(Graphics g) et paintComponent(Graphics g).
    Si vous avez une petite idée ....
    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
    import javax.swing.*;
     
    import java.awt.*;
     
    import java.util.*;
     
     
     
    public class JGraph2D extends JPanel
     
    {
     
        protected int hPanel, lPanel ;          // longueur et largeur du panel general
     
        protected int hGraph, lGraph ;          // longueur et largeur du panel du graphe
     
        protected int hEspace, lEspace ;        // gap horizontal et vertical
     
     
     
        protected JPanel panelGraph ;           // le panel contenant le graphe
     
     
     
        protected ArrayList dataX, dataY ;      // les donnees representees sur le graphe      
     
     
     
        protected int numVoie ;                 // le numero de la voie concernee
     
     
     
        /** Creates a new instance of JGraph2D */
     
        public JGraph2D(int l, int h, int i) 
     
        {
     
            super(null);                        // on cree le panel pere avec un layout null
     
            this.numVoie = i ;                  // on stocke le numero de voie
     
     
     
            this.hPanel = h ;                   // la longueur du panel
     
            this.lPanel = l ;                   // la largeur du panel
     
     
     
            this.setSize(this.lPanel,this.hPanel);
            this.setBorder(BorderFactory.createEtchedBorder());
     
     
     
            this.hGraph = (int)(0.8*this.hPanel) ;
     
            this.lGraph = (int)(0.8*this.lPanel) ;
     
            this.hEspace = (int)(0.1*this.hPanel) ;
     
            this.lEspace = (int)(0.1*this.lPanel) ;
     
     
     
            this.panelGraph = new JPanel(null);
     
            this.panelGraph.setBackground(Color.white);
     
            this.panelGraph.setBounds(this.lEspace,this.hEspace,this.lGraph, this.hGraph);
     
            this.panelGraph.setBorder(BorderFactory.createEtchedBorder());
     
     
     
     
     
            this.add(this.panelGraph);
     
        }
     
     
     
        public void tracerGrille(Graphics g)
     
        {
     
            // On definit la couleur de fond en gris
     
            g.setColor(Color.gray);
     
     
     
            // En horizontal
     
            g.drawLine(lEspace,hEspace+3*hGraph/4,lEspace+lGraph-2,hEspace+3*hGraph/4); // Au premier quart
     
            g.drawLine(lEspace,hEspace+hGraph/2,lEspace+lGraph-2,hEspace+hGraph/2); // Au milieu
     
            g.drawLine(lEspace,hEspace+hGraph/4,lEspace+lGraph-2,hEspace+hGraph/4); // Au troisieme quart
     
     
     
            // En vertical
     
            g.drawLine(lEspace+lGraph/4,hEspace+1,lEspace+lGraph/4,hEspace+hGraph-1); // Trace de la graduation au premier quart
     
            g.drawLine(lEspace+lGraph/2,hEspace+1,lEspace+lGraph/2,hEspace+hGraph-1); // Trace de la graduation au milieu
     
            g.drawLine(lEspace+3*lGraph/4,hEspace+1,lEspace+3*lGraph/4,hEspace+hGraph-1); // Trace de la graduation au troisieme quart
     
        }
     
     
     
        public void paint(Graphics g)
     
        {
        	  super.paintComponents(g);
     
     
     
            tracerGrille(g);
     
            tracerLegende(g);
     
     
     
        }
     
     
     
        public void tracerLegende(Graphics g)
     
        {
     
            g.drawRect(2,2,50,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
    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
    import javax.swing.*;
     
    import java.awt.*;
     
     
     
    public class FenetreTest extends JFrame
     
    {
     
        private JGraph2D graph ;
     
     
     
        public FenetreTest() 
     
        {
     
            super();
     
     
     
            build();
     
        }
     
     
     
        public void build()
     
        {
     
            this.setSize(300,300);
     
            this.setLocationRelativeTo(null);
     
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     
     
     
            this.add(new JGraph2D(250,100,0));
     
     
     
        }
     
     
     
        public void paint(Graphics g)
     
        {
     
            // On dessine tous les composants de l'interface
     
            paintComponents(g);
     
        }
     
        public static void main(String[] args)
        {
        	FenetreTest f = new FenetreTest();
        	f.setVisible(true);
        }
     
    }

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Oups, pas tu sûr que tu ais vraiment compris ce qu'il faut faire en Swing pour dessiner sur un JPanel.

    Dans ton cas présent la seule chose que tu as à faire est de redéfinir la méthode paintComponent de ton JGraph2D pour y faire les opérations sur tes Graphics. Par contre tu ne dois pas redéfinir la méthode paint de JGraph2D, la méthode paint en swing ayant pour but d'appeler les sous méthodes de dessin du composant comme paintComponent ou encore paintBorder.


    De même avec ta JFrame, où il ne t'est absolument pas nécessaire de redéfinir la méthode paint.

  3. #3
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut
    En fait, lorsque je fait ce que tu me dis, l'affichage n'est pas complet, c'est a dire que je me retrouve avec mon JGraph avec le panel ayant le fond blanc et pas la grille!
    Alors du coup je vais creer un objet grille héritant d'un JPanel et redefinir la methode paintComponent() de cette grille si j'ai bien compris?
    Merci du coup de pouce et a plus tard!

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    applique un setOpaque(false) à ton JPanel.

    ET fais en sorte que l'appel à super.paintComponent (sans s à la fin) se fasse au début de ta redéfinition de paintComponent

  5. #5
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut
    Comme je te l'ai dit plus haut, j'ai crée un objet Grille héritant de Jpanel que j'incorpore dans mon JGraph2D (lui même héritant de JPanel) puis dans ma fenetreTest (héritant de JFrame).
    J'ai redéfini la méthode paintComponent() dans ma Grille ainsi que dans mon JGraph2D et tou fonctionne nickel!
    Je pense que j'ai maintenant réellement bien compris les subtilité des méthodes paint, paintComponent mais par contre, à quoi sert la méthode paintComponents() (avantage, inconvéniant, etc...)???
    Merci encore et a bientot!

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    A rien pour les dev.

    Swing c'est du paiontComponent et basta

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Swing]probleme pour changer de JPanel
    Par mereyj dans le forum Composants
    Réponses: 8
    Dernier message: 19/06/2005, 12h55
  2. Probleme affichage noir quand Build/Compile
    Par balabi dans le forum MFC
    Réponses: 3
    Dernier message: 01/06/2005, 16h12
  3. [Swing] probleme de GridBagLayout
    Par calypso dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 13/04/2005, 17h26
  4. Probleme affichage dans tableau selon requête
    Par moulette85 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 01/03/2005, 15h44
  5. [swing] probleme de memoire
    Par leBigouden dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/05/2003, 14h19

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