如何在 FXML(Javafx 项目)中为图像设置监听器?

how to set listener for image in FXML (Javafx Project)?

如何在 fxml 中为图像设置事件处理程序。我写了以下 3 张图片,我想点击它们,它们会调用我已经在我的控制器中创建的函数 class 。我已经尝试过 onMouseClick 和 onAction 它们都不行。

   <ImageView fitHeight="31.0" fitWidth="29.0"  pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1" GridPane.rowIndex="0" >
            <image >
       <Image url="@/views/add.png" />
        </image>
        </ImageView>
     <ImageView fitHeight="31.0" fitWidth="29.0"  pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1" GridPane.rowIndex="1">
            <image>
       <Image url="@/views/remove.png" />
        </image>
        </ImageView>
     <ImageView fitHeight="31.0" fitWidth="29.0"  pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="1" GridPane.rowIndex="2">
            <image>
       <Image url="@/views/edit.png" />
        </image>
        </ImageView>

我也查看了其他 post,但他们都说了在实际定义图像时如何操作。 任何建议表示赞赏。

没有onAction因为ImageView不是真正的可点击组件,但没有什么可以阻止你监听它的鼠标事件,所以你可以使用onMousePressedorMouseClicked.此外,将 pickOnBounds 设置为 true 可确保即使您单击图像的透明部分也会触发事件。这是一个示例 FXML 文件:

<ImageView onMousePressed="#imageClicked" pickOnBounds="true">
    <image>
        <Image url="http://cdn.sstatic.net/Sites/Whosebug/company/img/logos/so/so-icon.png"/>
    </image>
</ImageView>

及其控制器中对应的方法:

@FXML
public void imageClicked(MouseEvent event) {
    System.out.println("Clicked: "+event.getSource());
}

结果:

Clicked: ImageView@7bf40ff6[styleClass=image-view]