JavaFX 将事件监听器附加到黑色圆圈

标签 java groovy javafx java-8 javafx-8

对于 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/

相关文章:

java - Hamcrest 匹配器使用项目的自定义匹配器按项目比较两个不同类型的集合

Groovy - 获取多维数组中的第一个元素

java - Java 1.8的Gradle 1.7:compileGroovy错误?

java - 我应该使用 Java EE 6 中的哪种依赖注入(inject)机制?

java - 从有状态的 drools session 中获取事实

java - JAVA中的GUI在同一帧中显示不同的图像

android - 什么是 applicationVariant.outputs?

java - 如何将两个场景合并为一个场景?

java - javafx 中的 java.lang.reflect.InitationTargetException 中的异常

java - 删除示例包仍然出现编译错误