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

Agents de placement/Fenêtres Java Discussion :

[JPanel]ordre d'affichage JFrame JPanel


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Points : 72
    Points
    72
    Par défaut [JPanel]ordre d'affichage JFrame JPanel
    Bonjour à tous,

    Je galère avec une notion pourtant toute simple, un JPanel à l'intérieur d'une JFrame avec surcharge de leur méthode paint respective. J'obtiens en fait un pb, même si l'ordre des paint est correct, le JPanel inclu est masqué par un fillRect dans la JFrame qui inclut le JPanel !

    Voici le code de la JFrame avec le JPanel principal :
    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
     
    package tests;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Graphics;
     
    import javax.swing.JFrame;
     
    public class MainFrame extends JFrame {
      public MainFrame() {
        super( "tests" );
        init();
      }
     
      private void init() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setUndecorated(true);
     
        Container pane = getContentPane();
        pane.setLayout( new BorderLayout() );
     
        PanelInside panelInside = new PanelInside();
        pane.add( panelInside );
     
        setBounds(50, 50, 800, 600);
        setVisible(true);
      }
     
      public void paint(Graphics g) {
        System.out.println( "painting MainFrame" );
        super.paint(g);
        g.setColor( Color.GREEN );
        g.fillRect(10, 10, getWidth()-20, getHeight()-20);
        g.setColor( Color.RED );
        g.drawRect(10, 10, getWidth()-20, getHeight()-20);
      }
     
      public static void main(String[] args) {
        new MainFrame();
      }
    }
    et le JPanel inclu :
    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
     
    package tests;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
     
    import javax.swing.JPanel;
     
    public class PanelInside extends JPanel {
      public PanelInside() {
        super( new BorderLayout() );
      }
     
      public void paint(Graphics g) {
        System.out.println( "painting PanelInside" );
        super.paint(g);
        g.setColor( Color.BLUE );
        g.drawRect(50, 50, getWidth()-100, getHeight()-100);
      }
    }
    Le drawRect bleu de PanelInside.paint() est masqué par le fillRect vert de MainFrame.paint(). Pourtant les logs donnent :
    painting MainFrame
    painting PanelInside
    !!!

    Cela fait un moment que je cherche et là, franchement, je coince ! Toute aide sera la bienvenue en vous remerciant par avance.

    Et, bon week-end à tous

    -David-

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Points : 72
    Points
    72
    Par défaut
    J'ai trouvé une solution, ça fonctionne, mais ça m'échappe...
    Alors voilà,
    - je ne surcharge pas paint de JFrame
    - je passe par un JPanel intermédiaire, je surcharge paint pour afficher le fond vert et le rectangle rouge
    - important, super.paint en fin de paint
    - dans ce JPanel j'inclus un autre JPanel
    - c'est la méthode paint surchargée de ce dernier qui affiche le rectangle bleu
    et pour que cela fonctionne,
    - pas d'appel au super paint ! ni au début, ni à la fin !

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    pour info (même si tu as une solution qui visiblement marche)

    surcharge la methode paintComponent et non paint.

    dans cette methode tu dessine ce que tu veux puis tu appelles paintChildren pour dessiner d'eventuels composants présent dans le panneau.
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Points : 72
    Points
    72
    Par défaut
    Ok, merci pour l'info eclesia.
    Bonne journée !

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

Discussions similaires

  1. JFrame JPanel et scope de variable
    Par yolepro dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 15/12/2006, 15h05
  2. Mise a jour de l'affichage JFrame-JPanel
    Par aristeas dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 10/06/2006, 10h12
  3. [urgent]Affichage de JPanel et mise à jour
    Par joker.benj dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 23/05/2006, 16h17
  4. [JPanel] probleme d'affichage
    Par joneil dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 06/05/2005, 18h15
  5. [DEBUTANT] Affichage de jpanel
    Par cosmos38240 dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 25/05/2004, 00h48

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