对于 Java,我完全是个新手,但我正在尝试构建一个跳棋游戏。我已经构建了一个板,但我很难确切地知道如何以及在哪里最好添加某种事件监听器以进行鼠标悬停和单击。
我使用了 Groovy 和 JavaFX 的组合,Groovy 是因为我喜欢它的语法,而 JavaFX 是因为它似乎是 Swing 的更好替代品。
class Window extends Application {
private int boardSize = 8
private int squareSize = 60
void start(Stage primaryStage) {
primaryStage.setTitle("Draughts")
GridPane checkerBoard = new GridPane()
checkerBoard.setPadding(new Insets(10,10,10,10))
configureBoardSpecs(checkerBoard)
layoutBoard(checkerBoard)
BorderPane root = new BorderPane(checkerBoard);
primaryStage.setScene(new Scene(root, 500, 500))
primaryStage.show()
}
private void layoutBoard(def checkerBoard) {
def fill = Color.WHITE
for (row in 0..boardSize-1) {
for (col in 0..boardSize-1) {
if ((row+col)%2) {
fill = Color.SADDLEBROWN
} else {
fill = Color.PERU
}
checkerBoard.add(new Rectangle(squareSize, squareSize, fill), col, row)
if (row % 2 != col % 2) {
if (row < 3) {
checkerBoard.add(new Circle(squareSize/2-4, Color.WHITE), col, row)
} else if (row > 4) {
checkerBoard.add(new Circle(squareSize/2-4, Color.BLACK), col, row)
}
}
}
}
}
private void configureBoardSpecs(def board) {
for (i in 0..boardSize-1) {
RowConstraints rowConstraints = new RowConstraints()
rowConstraints.setMinHeight(squareSize)
rowConstraints.setPrefHeight(squareSize)
rowConstraints.setMaxHeight(squareSize)
rowConstraints.setValignment(VPos.CENTER)
board.getRowConstraints().add(rowConstraints)
ColumnConstraints colConstraints = new ColumnConstraints()
colConstraints.setMinWidth(squareSize)
colConstraints.setMaxWidth(squareSize)
colConstraints.setPrefWidth(squareSize)
colConstraints.setHalignment(HPos.CENTER)
board.getColumnConstraints().add(colConstraints)
}
}
我在使用 jQuery 做这类事情时更加熟练,我会使用选择器来抓取任何类型的黑色圆圈并拥有它,这样当鼠标光标悬停在上面时,它会添加一个边框圆圈。然后单击时,整个圆或包围矩形的颜色都会改变颜色。
关于解决此问题的最佳方法的任何有用建议。
非常感谢,
最佳答案
您需要在创建圆圈时创建对圆圈的引用,以便添加监听器。例如(注意:我使用 Java,而不是 Groovy,因此语法可能不匹配,但这会给您一个想法):
Circle circle = new Circle(squareSize/2-4, Color.WHITE) ;
circle.setOnMouseClicked(e -> {
// handler code...
});
checkerBoard.add(circle, col, row) ;
关于JavaFX 将事件监听器附加到黑色圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33858173/