Deplacer un pion en java

Fermé
Jadorelinfo Messages postés 51 Date d'inscription samedi 24 mai 2014 Statut Membre Dernière intervention 15 avril 2016 - 30 déc. 2014 à 14:18
Jadorelinfo Messages postés 51 Date d'inscription samedi 24 mai 2014 Statut Membre Dernière intervention 15 avril 2016 - 31 déc. 2014 à 14:36
Bonjour,


je n'arrive pas a deplacer un pion dans un damier, car mon damier est constitué de jbutton avec un setIcon pour attacher l'icone.

Si je veux deplacer l'image, je dois deplacer le jbutton aussi et ça laisse un trou blanc , logique , quelqu'un aurait une solution ??


Merçi d'avance.
A voir également:

2 réponses

Jadorelinfo Messages postés 51 Date d'inscription samedi 24 mai 2014 Statut Membre Dernière intervention 15 avril 2016 1
Modifié par blux le 31/12/2014 à 14:37
Je poste mon code pour que vous y voyez plus clair.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Paint;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Dames extends JFrame implements MouseMotionListener,MouseListener {

 private int point;
 private int dx, dy;
 private JButton[] cases=new JButton[64];
 private JPanel pan=new JPanel();
 private Icon iconRecord=new ImageIcon();
 private Icon pionNoir=new ImageIcon("pionNoir.png");
 private Icon pionBlanc=new ImageIcon("pionBlanc.png");
 private Icon pionNoir2=new ImageIcon("pionNoir1.jpg");
 private ImageIcon coco= new ImageIcon("pionNoir.png");
 private JLabel label=new JLabel(coco);
 private final Point pos=new Point();
 public Dames()
 {
  this.setTitle("Jeu de dames");
  this.setSize(660, 680);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setLocationRelativeTo(null);
  this.setVisible(true);
  this.getContentPane().add(pan);
  //addMouseMotionListener(this);
  pan.setLayout(null);
  
  
  
  for (int i=0; i<cases.length;i++)
  {
   cases[i]=new JButton();
   label.addMouseListener(this);
   label.addMouseMotionListener(this);
   cases[i].addMouseMotionListener(this);
   cases[i].addMouseListener(this);
   pan.add(cases[i]);
   pan.add(label);
  
   
  }
  for (int posY=0; posY<641; posY+=80)
  {
   for (int pos=0; pos<64; pos++)
   {
    if (posY==0 && pos%2!=0 && (pos>=0 && pos<=7))
    {
     cases[pos].setIcon(pionBlanc);
    }
    if (posY==80 && pos%2==0 && (pos>7 && pos<=15))
    {
     cases[pos].setIcon(pionBlanc);
    }
    if (posY==160 && pos%2!=0 && (pos>=16 && pos<=23))
    {
     cases[pos].setIcon(pionBlanc);
    }
    if (posY==480 && pos%2==0 && (pos>=40 && pos<=47))
    {
     cases[pos].setIcon(pionNoir);
    }
    if (posY==560 && pos%2!=0 && (pos>47 && pos<=55))
    {
     cases[pos].setIcon(pionNoir);
    }
    if (posY==640 && pos%2==0 && (pos>55 && pos<=63))
    {
     cases[pos].setIcon(pionNoir);
    }
   }
  }
  
  int j=0;
  for (int y=0; y<600; y+=80)
  {
   for (int x=0; x<600; x+=80)
   {
    cases[j].setBounds(x, y, 80, 80);
    
    if (y==0 ||y==160 || y==320 || y==480 || y==640){
     if (j%2==0)
     {
      cases[j].setBackground(Color.YELLOW);
     }
     else{
      cases[j].setBackground(Color.BLACK);
      
      
      } 
    }
    else if (y==80 || y==240 ||y==400 || y==560){
     if (j%2==0)
     {
      cases[j].setBackground(Color.BLACK);
      
     }
     else
      cases[j].setBackground(Color.yellow);
    }
     j++;
    
   }
  }
 
 }
 public void mouseMoved(MouseEvent e)
 {
  dx=e.getX();
  dy=e.getY();
  
  for (int i=0; i<cases.length;i++)
  {
   if (e.getSource()==cases[i])
   {
    
    System.out.println("gogo :"+i);
   }
  }
  
 }
 public void mouseDragged(MouseEvent e)
 {

  for (int i=0; i<cases.length;i++)
  {
   
   if (e.getSource()==cases[i])
   {
    System.out.println("la case est"+i);
    iconRecord=cases[i].getIcon();
    //cases[i].setLocation(cases[i].getX()+e.getX()-pos.x-dx, cases[i].getY()+e.getY()-pos.y-dy);
    //cases[i].setIcon(null);
   }
  
  }
 }
 
 public void mousePressed(MouseEvent ee)
 {
  for (int i=0; i<cases.length; i++)
  {
   
  }
  //System.out.println("xxxx :"+ e.getX());
 }
 public void mouseClicked(MouseEvent ev)
 {
  //System.out.println("clique a "+ e.getX());
 }
 public void mouseReleased(MouseEvent e)
 {
  //pos.setLocation(e.getX(), e.getY());
  int posX=e.getX();
  int posY=e.getY();

  for (int i=0; i<cases.length; i++)
  {
   if (e.getSource()==cases[i])
   {
    System.out.println("the case is "+i);
    cases[i].setIcon(iconRecord);
   }
   
  }
  
 }
    public void mouseEntered(MouseEvent e)
    {
     for (int i=0; i<cases.length; i++)
  {
  
  }
    }
    public void mouseExited(MouseEvent e)
    {
     
    }
}     

0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
30 déc. 2014 à 15:03
Bonjour,

Je n'ai pas regardé le code, mais il faut séparer la partie visuelle de la partie métier.
Le JButton doit être associé à un objet Pion, et c'est l'objet Pion qui se déplace d'un JButton à un autre, mais le JButton n'a pas à se déplacer...
0
Jadorelinfo Messages postés 51 Date d'inscription samedi 24 mai 2014 Statut Membre Dernière intervention 15 avril 2016 1
30 déc. 2014 à 15:15
merçi pour ta reponse kx, donc c'est impossible de deplacer une image en java?? je suis obligé de creer une classe pion que j'insere dans mon code?
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020 > Jadorelinfo Messages postés 51 Date d'inscription samedi 24 mai 2014 Statut Membre Dernière intervention 15 avril 2016
30 déc. 2014 à 18:00
Pour moi ça n'a pas de sens de "déplacer l'image" et encore moins déplacer le JButton. En Java ce que tu fais c'est passer d'un état à un autre, dans ton cas, j'affiche l'image sur un JButton puis je la masque, et inversement. Déplacer le pion c'est donc masquer l'image du JButton où le pion état à l'état initial, et afficher l'image sur le JButton d'arrivée du pion. Cela met donc en jeu deux JButton qui restent au même endroit, il n'y a pas de JButton qui se déplacent sur la JFrame...
0
Jadorelinfo Messages postés 51 Date d'inscription samedi 24 mai 2014 Statut Membre Dernière intervention 15 avril 2016 1
31 déc. 2014 à 13:53
merçi kx, c'est deja un peu plus clair dans ma tete, mais j'aurai une autre question, quand j'utilise les methodes getX() et getY() je recupere des nombres negatifs, je pense que c'est du au fait que chaque composant est un pan a lui seul, comment je pourrais remedier a un tel probleme??

Merçi d'avance
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020 > Jadorelinfo Messages postés 51 Date d'inscription samedi 24 mai 2014 Statut Membre Dernière intervention 15 avril 2016
31 déc. 2014 à 14:28
Pour ça il faut regarder dans la documentation : java.awt.event.MouseEvent

Returns the horizontal x (vertical y) position of the event relative to the source component.

Puisque la position est relative à la source, les valeurs peuvent bien sûr être négatives.
0
Jadorelinfo Messages postés 51 Date d'inscription samedi 24 mai 2014 Statut Membre Dernière intervention 15 avril 2016 1
31 déc. 2014 à 14:36
merçi encore une fois kx, je vais essayer de me debrouiller avec toutes ces infos.

Bonne journée et surtout bonne année
0

Discussions similaires