Ajouter un panneau sur un dessin

Résolu
fatalerror Messages postés 17 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 12 novembre 2017 - 17 août 2015 à 10:13
fatalerror Messages postés 17 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);
}
}

2 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
19 août 2015 à 10:16
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);
  }
}

1
fatalerror Messages postés 17 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 12 novembre 2017
20 août 2015 à 17:27
Et le tour est joué!!!
Merci bien Twinuts!
0
Rejoignez-nous