Ajouter un panneau sur un dessin [Résolu]

Messages postés
18
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
12 novembre 2017
- - Dernière réponse : fatalerror
Messages postés
18
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
12 novembre 2017
- 20 août 2015 à 17:27
Bonjour,
ça fait un moment que je me casse à vouloir ajouter un JPanel à un objet que j'ai dessiné avec fillPolygon(...). Je commence à me demander si c'est d'ailleurs possible!

voici mes petits bouts de codes sur lesquels je fais des tests:

Classe Cellule
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class Cellule extends JPanel {

public Color couleurCellule;
//public Sommet sommet;

public Cellule(Color c){
couleurCellule = c;
}

public void paint(Graphics g){
g.setColor(couleurCellule);
int x[] = {0, 80, 220, 300, 220, 80};
int y[] = {100, 20, 20, 100, 180, 180};
g.fillPolygon(x, y, 6);

}

}


Classe Fenetre:

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Fenetre extends JFrame {

private static int largeurFenetre = 700,
hauteurFenetre = 500;
private JPanel panneau;

public Fenetre(String titre) {
super(titre);
Cellule cellule = new Cellule(Color.green);
cellule.setBounds(100, 100, 300, 250);
//cellule.setBackground(Color.yellow);
add(cellule);

panneau = new JPanel();
panneau.setLayout(null);
panneau.setBackground(new Color(204, 11, 255));
panneau.setBounds(10, 10, 50, 50);

cellule.add(panneau);
//add(panneau);

setSize(largeurFenetre, hauteurFenetre);
setLocationRelativeTo(null);
setLayout(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String args[]) {
new Fenetre("Test").setVisible(true);
}
}

Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
87
1
Merci
Salut,

Oui c'est possible, cependant tu as oublié les fondamentaux...

- En SWING on ne dessine JAMAIS dans le paint mais dans paintComponent.

- Si tu veux bénéficier des modifications de background de ton objet Cellule il est préférable d'appeler la méthode super.paintComponent au début de ta redéfinition.

- Enfin et surtout (pour ton cas) si tu invalides les layouts il faut le faire pour tout le monde, quand tu fais setLayout(null) tu t'adresses au layout du composant courant, donc au placement des éléments que tu vas mettre dedans, du coup le panneau.setLayout(null) ne sert absolument à rien et par contre le cellule.setLayout(null) qui est absent est important ;)

Ce qui donne:

Classe Cellule
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class Cellule extends JPanel {
  private final Color couleurCellule;

  // public Sommet sommet;

  public Cellule(final Color c) {
    couleurCellule = c;
  }
  

  @Override
  public void paintComponent(final Graphics g) {
    super.paintComponent(g);
    g.setColor(couleurCellule);
    final int x[] = { 0, 80, 220, 300, 220, 80 };
    final int y[] = { 100, 20, 20, 100, 180, 180 };
    g.fillPolygon(x, y, 6);
  }

}


Classe Fenetre
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Fenetre extends JFrame {
  private static int        largeurFenetre   = 700;
  private static int        hauteurFenetre = 500;
  private final JPanel      panneau;

  public Fenetre(final String titre) {
    super(titre);
    final Cellule cellule = new Cellule(Color.GREEN);
    cellule.setBounds(100, 100, 300, 250);
    cellule.setBackground(Color.yellow);
    cellule.setLayout(null);
    add(cellule);

    panneau = new JPanel();
    panneau.setBackground(new Color(204, 11, 255));
    panneau.setBounds(10, 10, 50, 50);

    cellule.add(panneau);
    // add(panneau);

    setSize(largeurFenetre, hauteurFenetre);
    setLocationRelativeTo(null);
    setLayout(null);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  public static void main(final String args[]) {
    new Fenetre("Test").setVisible(true);
  }
}

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Twinuts
Messages postés
18
Date d'inscription
dimanche 24 mars 2013
Statut
Membre
Dernière intervention
12 novembre 2017
0
Merci
Et le tour est joué!!!
Merci bien Twinuts!
Commenter la réponse de fatalerror