使用onMouseClicked方法时如何获取ImageView的ID?

时间:2019-02-16 22:04:46

标签: java javafx

我在使用onMouseClicked方法获取imageViews的ID时遇到麻烦。在此应用程序中,我有20个ImageViews,当我单击其中的一个时,它应将文件中的图像更改为图像。到目前为止,我有这个imagePicker方法,其中我使用imgViewOne测试了图像更改,它是第一个ImageView的ID,并且可以正常工作。

public void imagePicker() {
    try {
        File file = new File("/home/zoran/eclipse-workspace/Pogodi tko sam/bin/application/iks.png");
        String localUrl = file.toURI().toURL().toString();
        Image image = new Image(localUrl);
        //imgViewOne.setImage(image);
    } catch (MalformedURLException e) {
        System.out.println("Malformed url ex");
        e.printStackTrace();
    }           
}

我在这里找到了一些有关获取文本字段ID或其他元素的答案,但是它们都有事件处理程序,可以在这些事件处理程序上调用event.getID().,但是这里没有事件处理程序,所以我不知道如何获得ID。 我试图将参数设置为imagePicker,例如imagePicker(ImageView v),然后调用String id = v.getID();,但无法更改此属性上的图像。 如果有人知道解决方案,请与我分享。提前致谢!

编辑: 每个ImageView都具有id imagePicker的onMouseCliked方法,因此每次单击都会转到该方法。

      <ImageView fx:id="trinaesta" onMouseClicked="#imagePicker" fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" GridPane.rowIndex="3">

1 个答案:

答案 0 :(得分:3)

您正在使用controller method event handler,这意味着您的方法可以并且通常应该具有适当的Event子类的单个参数。对于您的情况,在设置MouseEvent处理程序时,参数应为onMouseClicked。然后,您可以获取事件的来源,该来源将是相应的ImageView(将处理程序添加到ImageView中)。

public void imagePicker(MouseEvent event) {
    event.consume();
    try {
        File file = new File("/home/zoran/eclipse-workspace/Pogodi tko sam/bin/application/iks.png");
        String localUrl = file.toURI().toURL().toString();
        Image image = new Image(localUrl);
        ((ImageView) event.getSource()).setImage(image); // set image on clicked ImageView
    } catch (MalformedURLException e) {
        System.out.println("Malformed url ex");
        e.printStackTrace();
    }           
}

请注意,getSource返回Object,因此您必须转换为适当的类型。