fatalerror
Messages postés18Date d'inscriptiondimanche 24 mars 2013StatutMembreDernière intervention12 novembre 2017
-
17 août 2015 à 10:13
fatalerror
Messages postés18Date d'inscriptiondimanche 24 mars 2013StatutMembreDernière intervention12 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);
Twinuts
Messages postés5374Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention 3 mars 2023111 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);
}
}