[JavaFX] Déplacement d'un jeton avec la souris - Scrabble

Fermé
darksniper12 - 31 oct. 2017 à 17:00
Bonjour à tous,

Je suis en train, du moins j'essaye, de réaliser un scrabble en Java et JavaFX.

Débutant en JavaFX, j'essaye de me débrouiller avec les tutos qu'on trouve sur le net.
Mais j'ai un peu de mal avec les événements de la souris, notamment le fais de déplacer un jeton du chevalet vers une case du plateau de jeu, en cliquant sur le jeton puis en cliquant sur la case du plateau où l'on veut mettre le jeton.

Voici mon code:
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;


public class ScrabbleMain extends Application{

private double largeurPlat = 800;
private double longueurPlat = 800;

private int ligne = 15;
private int colonne = 15;

double largeurCase = largeurPlat / ligne;
double longueurrCase = longueurPlat / colonne;

Case[][] playfield = new Case[ligne][colonne];
Jeton[][] chevaletJeton = new Jeton[7][1];


public static void main(String[] args) {
Application.launch(ScrabbleMain.class, args);
}

@Override
public void start(Stage primaryStage)
{
primaryStage.setTitle("Scrabble");
StackPane root = new StackPane();
Scene scenePrincipale = new Scene(root, 1200, 1000, Color.WHITE); //Création de la scéne


Group grille = new Group();
// initialize playfield
for( int i=0; i < ligne; i++) {
for( int j=0; j < colonne; j++) {

// create node
Case node = new Case(i, j, largeurCase, longueurrCase);

// add node to group
grille.getChildren().add(node);

// add to playfield for further reference using an array
playfield[i][j] = node;

}
}
grille.setTranslateX(-20);
grille.setTranslateY(-80);
root.getChildren().add(grille);

Group chevalet = new Group();
for( int i=0; i < 7; i++) {

// create node
Jeton node = new Jeton(i, 0, largeurCase, longueurrCase);

// add node to group
chevalet.getChildren().add(node);

// add to playfield for further reference using an array
chevaletJeton[i][0] = node;

}
chevalet.setTranslateX(-20);
chevalet.setTranslateY(400);
root.getChildren().add(chevalet);




primaryStage.setScene(scenePrincipale);
primaryStage.show();
}


public static class Case extends StackPane {

Rectangle rectangle = new Rectangle();
public Case(int x, int y, double largeur, double longueur) {

// create rectangle
Rectangle rectangle = new Rectangle( largeur, longueur);
rectangle.setStroke(Color.WHITE);
rectangle.setFill(Color.SEAGREEN);



// set position
setTranslateX(x * largeur);
setTranslateY(y * longueur);

getChildren().addAll(rectangle);

}

}

public static class Jeton extends StackPane {

Rectangle rectangle = new Rectangle();
public Jeton(int x, int y, double largeur, double longueur) {

// create rectangle
Rectangle rectangle = new Rectangle( largeur, longueur);
rectangle.setStroke(Color.WHITE);
rectangle.setFill(Color.SEAGREEN);



// set position
setTranslateX(x * largeur);
setTranslateY(y * longueur);

this.setOnMouseEntered(new EventHandler<MouseEvent>(){
public void handle(MouseEvent me){
rectangle.setFill(Color.LIGHTGREY);
}
});
this.setOnMouseExited(new EventHandler<MouseEvent>(){
public void handle(MouseEvent me){
rectangle.setFill(Color.SEAGREEN);
}
});
this.setOnMousePressed(new EventHandler<MouseEvent>(){
public void handle(MouseEvent me){
appuyer(x, y);
}
});
this.setOnMouseReleased(new EventHandler<MouseEvent>(){
public void handle(MouseEvent me){
relacher(y);
}
});

getChildren().addAll(rectangle);

}

public void appuyer(int positionX, int positionY){
rectangle.setFill(Color.DARKGREY);
System.out.println(positionX+"/"+positionY);
}

public void relacher(int positionY){
rectangle.setFill(Color.WHITE);
}


}
}



Bien cordialement
A voir également: