Afficher une forme par dessu une autre
Résolu
lamouchetsetse
Messages postés
112
Date d'inscription
Statut
Membre
Dernière intervention
-
lamouchetsetse Messages postés 112 Date d'inscription Statut Membre Dernière intervention -
lamouchetsetse Messages postés 112 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
J'ai un problème que je ne comprend pas. Voila, je souhaite insérer un carré par dessus un rond lors d’un clic, mais le carré ce trouve toujours en dessous du rond. Pourquoi?
Voici mon code:
Merci pour votre aide.
J'ai un problème que je ne comprend pas. Voila, je souhaite insérer un carré par dessus un rond lors d’un clic, mais le carré ce trouve toujours en dessous du rond. Pourquoi?
Voici mon code:
package evenement_souris.fr; import java.awt.Color; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JPanel; public class Fenetre extends JFrame implements MouseListener { Fenetre() { this.setTitle("EvenementSouris"); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(800, 800); Rond rond = new Rond(); this.getContentPane().add(rond); this.setVisible(true); this.addMouseListener(this); } @Override public void mouseClicked(MouseEvent arg0) {} @Override public void mouseEntered(MouseEvent arg0) {} @Override public void mouseExited(MouseEvent arg0) {} @Override public void mousePressed(MouseEvent arg0) { this.getContentPane().add(new Carre(Color.GREEN)); validate(); repaint(); } @Override public void mouseReleased(MouseEvent arg0) {} }
Merci pour votre aide.
Configuration: Linux / Firefox 75.0
A voir également:
- Afficher une forme par dessu une autre
- Mise en forme conditionnelle excel - Guide
- Mise en forme tableau word - Guide
- Afficher appdata - Guide
- Afficher taille dossier windows - Guide
- Windows 11 clic droit afficher plus d'options par défaut - Guide
1 réponse
Bonjour,
"le carré ce trouve toujours en dessous du rond. Pourquoi?"Parce que c'est ainsi qu'il est prévu que la méthode Container.html#add(Component) fonctionne :
"Appends the specified component to the end of this container."Si tu veux changer l'ordre, il faut utiliser la méthode Container.html#add(Component,int)
"Adds the specified component to this container at the given position."Exemple :
this.getContentPane().add(new Carre(Color.GREEN), 0);
1)
Dans un nom de package on ne devrait pas avoir de et les différents champs doivent être du plus générique (dossier parent) vers le plus spécifique (sous-dossier), dans ton cas on devrait donc avoir :
(avec les dossiers qui vont bien)
2)
Il vaut mieux séparer dans des classes distinctes, l'objet manipulé (JFrame) et l'objet qui le manipule (MouseListener), cela évite des classes fourre-tout et du code comme où en réalité est deux choses différentes (une JFrame à gauchen un MouseListener à droite).
3)
D'une part, le this est facultatif (et ce qui est facultatif ne devrait pas être mis, ça alourdit le code), d'autre part la classe JFrame étant également un Container, elle a déjà une méthode add, il est donc inutile de passer par le contentPane.
4)
Pour simplifier ton MouseListener et éviter l'implémentation de méthodes vides, tu peux utiliser un MouseAdapter et ne surcharger que les méthodes que tu veux définir.
5)
Attention, à chaque clic tu vas créer et ajouter un nouvel objet, est-ce bien ce que tu veux faire ?
Si tu veux n'afficher qu'une seule fois le carré ou si tu as l'intention de cliquer beaucoup de fois et d'afficher plein de carrés, cela semble une mauvaise approche.
Code corrigé avec mes remarques :