Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.stevenliebregt.test;
- import javafx.fxml.FXML;
- import javafx.fxml.Initializable;
- import javafx.geometry.Insets;
- import javafx.scene.control.Button;
- import javafx.scene.input.ClipboardContent;
- import javafx.scene.input.DataFormat;
- import javafx.scene.input.Dragboard;
- import javafx.scene.input.TransferMode;
- import javafx.scene.layout.*;
- import javafx.scene.paint.Color;
- import java.net.URL;
- import java.util.ResourceBundle;
- public class GameController implements Initializable
- {
- private static final int HAND_SIZE = 7;
- private static final int BOARD_SIZE = 15;
- private static final DataFormat TILE_FORMAT = new DataFormat("Tile");
- @FXML
- private GridPane boardGridPane;
- @FXML
- private GridPane handGridPane;
- private Button draggingTile;
- @Override
- public void initialize(URL location, ResourceBundle resources)
- {
- initializeHand();
- initializeBoard();
- }
- private void initializeHand()
- {
- for (int i = 0; i < HAND_SIZE; i++) {
- StackPane stackPane = new StackPane();
- stackPane.setPrefSize(80, 80);
- stackPane.setBackground(new Background(new BackgroundFill(
- Color.SALMON,
- CornerRadii.EMPTY,
- Insets.EMPTY
- )));
- handGridPane.add(stackPane, i, 0);
- Button tile = new Button();
- tile.setPrefSize(80, 80);
- tile.setText("A");
- tile.setOnDragDetected(event -> {
- Dragboard dragboard = tile.startDragAndDrop(TransferMode.MOVE);
- dragboard.setDragView(tile.snapshot(null, null));
- ClipboardContent clipboardContent = new ClipboardContent();
- clipboardContent.put(TILE_FORMAT, " ");
- dragboard.setContent(clipboardContent);
- draggingTile = tile;
- });
- stackPane.setOnDragOver(event -> {
- Dragboard dragboard = event.getDragboard();
- if (dragboard.hasContent(TILE_FORMAT) && draggingTile != null) {
- event.acceptTransferModes(TransferMode.MOVE);
- }
- });
- stackPane.setOnDragDropped(event -> {
- // TODO: CHECK IF ALREADY HAS A TILE
- Dragboard dragboard = event.getDragboard();
- if (dragboard.hasContent(TILE_FORMAT)) {
- ((StackPane) draggingTile.getParent()).getChildren().remove(draggingTile);
- stackPane.getChildren().add(draggingTile);
- event.setDropCompleted(true);
- draggingTile = null;
- }
- });
- stackPane.getChildren().add(tile);
- }
- }
- private void initializeBoard()
- {
- for (int row = 0; row < BOARD_SIZE; row++) {
- for (int column = 0; column < BOARD_SIZE; column++) {
- StackPane stackPane = new StackPane();
- stackPane.prefWidthProperty().bind(boardGridPane.widthProperty().divide(BOARD_SIZE));
- stackPane.prefHeightProperty().bind(boardGridPane.heightProperty().divide(BOARD_SIZE));
- if ((row + column) % 2 == 0) {
- stackPane.setBackground(new Background(new BackgroundFill(
- Color.GOLD,
- CornerRadii.EMPTY,
- Insets.EMPTY
- )));
- }
- stackPane.setOnDragOver(event -> {
- Dragboard dragboard = event.getDragboard();
- if (dragboard.hasContent(TILE_FORMAT) && draggingTile != null) {
- event.acceptTransferModes(TransferMode.MOVE);
- }
- });
- stackPane.setOnDragDropped(event -> {
- // TODO: CHECK IF ALREADY HAS A CHILD
- Dragboard dragboard = event.getDragboard();
- if (dragboard.hasContent(TILE_FORMAT)) {
- ((StackPane) draggingTile.getParent()).getChildren().remove(draggingTile);
- stackPane.getChildren().add(draggingTile);
- event.setDropCompleted(true);
- draggingTile = null;
- }
- });
- boardGridPane.add(stackPane, column, row);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment