Problème : MouseEvent et superposition de JFrame

moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012 - 22 mai 2012 à 10:55
moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012 - 23 mai 2012 à 16:26
Bonjour à tous!
Voilà, je viens de bien commencer javas.Swing et toutes les interfaces qui vont avec
Bon, certes je me suis péniblement débrouillé avec les Layout divers et variés, ce sur quoi j'ai opté sur AbsoluteLayout, parce que j'y arrivais vraiment pas
Oui mais voilà, j'ai des JFrame (qui représentent des cartes) empilés les uns sur les autres (pour faire une main de jeu de cartes). Mon but : appeler telle ou telle carte avec MouseEvent:mouseClicked().Mais après pas mal de tests, je me suis rendu compte que mes JFrame de cartes étaient énormes! Donc on clique toujours sur la même carte. Je vous passe les morceaux de code qui me semblent les plus utiles.
Merci pour votre aide!

Pour mon JPanel de carte :
/* Note : j'ai enlevé plein de trucs, comme l'attribution de l'image de la Carte qui fonctionne */
public class CardPanel extends JPanel{
public CardPanel(int x, int y){
this.setBounds(x-30, y-40, x + 30, y + 40); // 38
try {
img = ImageIO.read(new File("src/cards/b.gif"));
} catch (IOException e) {
System.out.println("Erreur affectation background carte.");
}
C = null;
}
public void paintComponent(Graphics g){
super.paintComponents(g);
if (img == null) System.out.println("Erreur : l'Image de Carte n'a pas été définie !");
else g.drawImage(img, 0, 0, this);
}


Et pour le code de la fenêtre principale : (écrémé au max)
public class FenPrincipale extends JFrame implements MouseListener{
private boolean locked;										// Verrouille la fenÔøΩtre d'≈Ωl≈Ωments.
private JPanel panTotal 						// Panels globaux
panInfo;													// Panel d'information
private HashMap panSides;					// Panels r≈Ωgionaux
private HashMap> panCards; 	// Panels r≈Ωgionaux des bords

private FenPrincipale(){

// ParamÔøΩtre de Frame : 
this.setSize(new Dimension(800, 660));
this.setTitle("Belote");
final int XMILIEU = this.getSize().width / 2;
this.setResizable(false);

// Initialisation des ≈Ωl≈Ωments
panTotal =		 new PanTotal();
panInfo = 		 new JPanel();
panSides =		 new HashMap();
panCards = 		 new HashMap>();

// Affectation de Layouts particuliers
panTotal.setLayout(new BorderLayout());

// Inclusions :
this.setContentPane(panTotal);

// Effectu≈Ω position par position.
for(Position p : Position.values()){

panSides.put(p, new JPanel());
panSides.get(p).setPreferredSize(new Dimension(100,120));
panSides.get(p).setLayout(null);
panSides.get(p).setOpaque(false);

// Partie cr≈Ωation de 8 cartes de la main.
ArrayList<CardPanel> tempMain = new ArrayList<CardPanel>();
if (p Position.EST || p Position.OUEST) 
for(int j = 0 ; j<8 ; j++) tempMain.add(new CardPanel(45, -30*(j-4) + 140));	// Parametres arbitraires
else
for(int j = 0 ; j<8 ; j++) tempMain.add(new CardPanel(30*(j-4) + XMILIEU, 55));	// Parametres arbitraires

// Ecouteurs d'events :
for(CardPanel CP : tempMain) CP.addMouseListener(this);
panCenter.addMouseListener(this);
panCenterCards.get(p).addMouseListener(this);

panCards.put(p, tempMain);

// Incorporation de tout dans les panneaux lat&#8776;&#937;raux
for(CardPanel CP : panCards.get(p))panSides.get(p).add(CP);
panCenter.add(panCenterCards.get(p));
panCenterCards.get(p).setVisible(false);
}
panTotal.add(panSides.get(Position.SUD), BorderLayout.SOUTH);
panTotal.add(panSides.get(Position.OUEST), BorderLayout.WEST);
panTotal.add(panSides.get(Position.NORD), BorderLayout.NORTH);
panTotal.add(panSides.get(Position.EST), BorderLayout.EAST);	
}

public void mouseClicked(MouseEvent e){
if (locked) {System.out.print("Je peux pas, c'est locker"); return;}
Object source = e.getSource();
// Clic au centre
if(source == panCenter)	{InterGUI.getInstance().notifyClickCenter();return;}

for(CardPanel CP : panCenterCards.values()) if(source == CP){
InterGUI.getInstance().notifyClickCenter();
return;
}
// Clic aux bords
for(Position pos : Position.values()){
for(CardPanel CP : panCards.get(pos)) if(source == CP){
// TODO A virer :
System.out.println("Click au bord " + pos.toString() + " " + CP.getCarte().toString());
return;
}
}
}
/**
 * @param pos : position à redessiner
 */
public void repaint(Position pos){
for(int j = 0 ; j < 8 ; j++)
if(panCards.get(pos).get(j).isVisible()) panCards.get(pos).get(j).update(getGraphics());
}

-------
Comme quoi, vraiment rien n'est impossible...

2 réponses

moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012
22 mai 2012 à 11:14
J'ai oublié de vous mettre un screenshot du problème

Comme quoi, vraiment rien n'est impossible...
0
moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012
23 mai 2012 à 16:26
Trouvé, c'est un problème de définition de SetBounds.
0
Rejoignez-nous