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

时间:2016-08-23 06:09:38

标签: image javafx eventhandler

如何在fxml中为image设置事件处理程序。我写了以下3个图像,我想点击它们,然后它们调用我已在控制器类中创建的函数。我已经尝试过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>

我也检查了其他帖子,但他们都说如何在实际定义图像时这样做。 任何建议表示赞赏。

1 个答案:

答案 0 :(得分:4)

没有onAction,因为ImageView,实际上不是可点击的组件,但没有什么可以阻止您收听其鼠标事件,因此您可以使用onMousePressed或{ {1}}。此外,设置orMouseClicked为true可确保即使您单击图像的透明部分也会触发事件。以下是FXML文件的示例:

pickOnBounds

其控制器中的相应方法:

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

结果:

  

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