i具有JavaFx Chess Project的以下代码。释放鼠标时,我需要居中放置。有什么解决方案?有两个lambda表达式,第一个是当我拖动鼠标时,更改块的位置,第二个是(在这里我需要帮助),当我释放鼠标时,该块应该适合对象。有解决方案吗?
public ChessBoard(){
for (int x = 0 ; x < ChessBoard.length; x++){
for (int y = 0; y < ChessBoard.length; y++){
Rectangle rectangle = new Rectangle(86,86);
rectangle.setStroke(Color.BLACK);
rectangle.setFill((x + y) % 2 == 0 ? Color.WHITE : Color.DARKGRAY);
gridpane.add(rectangle,x,y);
gridpane.setAlignment(Pos.BASELINE_LEFT);
}
}
/*Image blackKing = new Image("ChessPiece\\Black_King.png");
ImageView imageView1 = new ImageView(blackKing);*/
Image blackBishop = new Image("ChessPiece\\Black_Bishop.png");
ImageView imageView2 = new ImageView(blackBishop);
gridpane.getChildren().add(imageView2);
imageView2.setOnMouseDragged(e->{
imageView2.setTranslateX(e.getSceneX() - 25);
imageView2.setTranslateY(e.getSceneY() - 25);
if(imageView2 == gridpane.onMouseReleasedProperty()){
}
});
}
}
[MouseEvent
documentation中的“拖动手势”下,使用全按并拖动释放手势。简而言之,此拖动模式允许将鼠标拖动事件传递到除在其上启动拖动手势的节点以外的其他节点。您可以通过在MouseEvent
处理程序中调用startFullDrag()
来启动此模式。
通过这种方式,您可以检测到板中基础正方形上的拖动释放,并只需将棋子的网格窗格坐标设置为该正方形即可。
这是一个完整的工作示例:
dragDetected