Boa Tarde pessoal,
Estou testando o javafx 2.0 e estou fazendo um joguinho de damas, me baseio em um exemplo em javafx 1.3 (http://goo.gl/PuMfS), como faço a parte de drag and drop dos circulos ???
Segue classes:
package org.damas;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import org.damas.componentes.Pecas;
import org.damas.componentes.Quadros;
/**
*
* @author mpolverini
*/
public class Main extends Application{
/**
* @param args the command line arguments
*/
private Group root = new Group();
private final int SIZE = 40;
private final int WIDTH = 320;
private final int HEIGHT = 320;
public static void main(String[] args) {
Application.launch(Main.class, args); //Inicia a aplicação!
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Damas JavaFX2.0 BETA 42"); // Titulo da janela
Scene tabuleiro = new Scene( //cria a cena
root,
WIDTH,
HEIGHT,
Color.WHITE);
Quadros.adicionaQuadros(root, SIZE); //Chama método para criar os quadros cinzas e brancos
new Pecas().adicionaPecas(root, SIZE, 12);
primaryStage.setScene(tabuleiro); //Insere a cena !
primaryStage.setResizable(false);//Impede alteração no tamanho da tela !
primaryStage.show(); //Mostra a cena !
}
}
package org.damas.componentes;
import javafx.scene.Group;
import javafx.scene.effect.InnerShadow;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
/**
*
* @author mpolverini
*/
public class Pecas {
private Circle[] brancas = new Circle[12];
private Circle[] pretas = new Circle[12];
//Sombreado Preto para as peças brancas
private final InnerShadow BLACK = new InnerShadow(10, 1, 1, Color.BLACK);
//Sombreado Branco para as peças pretas
private final InnerShadow WHITE = new InnerShadow(14, 1, 1, Color.LIGHTGRAY);
public Pecas() {
}
public void adicionaPecas(Group root, int SIZE, int RAIO) {
int posX = 0; // começa na primeira linha
int posY = 0; // começa na primeira coluna
//Peças Brancas
/**
* É adiciona o valor SIZE/2 (tamanho do quadro) para que o circulo fique no centro
*/
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 4; y++) {
brancas[y] = new Circle((posX * 2 + (SIZE / 2)), (posY + SIZE / 2), RAIO, Color.WHITE);
brancas[y].setEffect(BLACK);
root.getChildren().add(brancas[y]);
posX += SIZE;
}
posY += SIZE;
posX = 0;
if (x % 2 == 0) {
posX += SIZE / 2;
}
}
//Peças pretas
posY = SIZE * 5; //Começa na sexta linha
posX = 0; //Começa na primeira coluna
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 4; y++) {
pretas[y] = new Circle((posX * 2 + (SIZE / 2)), (posY + SIZE / 2), RAIO, Color.BLACK);
pretas[y].setEffect(WHITE);
root.getChildren().add(pretas[y]);
posX += SIZE;
}
posX = 0;
posY += SIZE;
if (x % 2 == 0) {
posX += SIZE / 2;
}
}
}
public Circle[] getBrancas() {
return brancas;
}
public void setBrancas(Circle[] brancas) {
this.brancas = brancas;
}
public Circle[] getPretas() {
return pretas;
}
public void setPretas(Circle[] pretas) {
this.pretas = pretas;
}
}
package org.damas.componentes;
import javafx.scene.Group;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
/**
*
* @author mpolverini
*/
public class Quadros {
public static void adicionaQuadros(Group root, int SIZE) {
//Cria os quadros cinzas e brancos
Rectangle[][] quadros = new Rectangle[8][8];
int posX = 0;
int posY = 0;
boolean branco = false;
//Posiciona e colore os quadros
for (int x = 0; x < 8; x++) {
for (int y = 0; y < 8; y++) {
quadros[x][y] = new Rectangle(posX, posY, SIZE, SIZE);
if (branco) {
quadros[x][y].setFill(Color.WHITE);
branco = false;
} else {
quadros[x][y].setFill(Color.GRAY);
branco = true;
}
root.getChildren().add(quadros[x][y]); //Adiciona no grupo
posX += 40;
}
posY += 40;
posX = 0;
branco = !branco;
}
}
}
Já tentei usar :
tabuleiro.startDragAndDrop(TransferMode.MOVE);
mas da isso:
Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:378)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:27)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:97)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
at javafx.scene.Scene$DnDGesture.access$6100(Scene.java:1904)
at javafx.scene.Scene.impl_startDragAndDrop(Scene.java:3734)
at javafx.scene.Scene.startDragAndDrop(Scene.java:3723)
at org.damas.Main.start(Main.java:40)
at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:298)
at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:136)
at com.sun.javafx.application.PlatformImpl$3.run(PlatformImpl.java:108)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
at com.sun.glass.ui.win.WinApplication$2$1.run(WinApplication.java:62)
... 1 more
Java Result: 1