FXML / JavaFX如何使ImageView Clickable?

时间:2017-08-24 17:40:46

标签: javafx fxml

我想使用FXML更改图像视图中的图像并更改图像我打开fileChooser来选择应该替换旧图像的图像,我现在有2个问题:

如何使ImageView Clickable这是我用于此

的代码
public void imagePicker(){

    Defaultview.setPickOnBounds(true); // allows click on transparent areas
    Defaultview.setOnMouseClicked((MouseEvent e) -> {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Open Resource File");
        fileChooser.showOpenDialog(new Stage());
    });
}

在我的FXML文件中我有:

<ImageView fx:id="Defaultview" fitHeight="93" fitWidth="93"
    pickOnBounds="true" preserveRatio="true" onAction='#imagePicker'>

对于图像更改,我想从

更改它

Image url="@../images/default.png"

到图像选择。

2 个答案:

答案 0 :(得分:2)

ImageView没有onAction属性(因此我认为在加载FXML文件时应该会遇到运行时错误)。如果您想响应鼠标点击,则应使用onMouseClicked

<ImageView fx:id="Defaultview" fitHeight="93" fitWidth="93" 
    pickOnBounds="true" preserveRatio="true" onMouseClicked='#imagePicker'>

在FXML中注册事件处理程序意味着在事件发生时(即当用户单击图像视图时)将调用imagePicker()方法。从onClicked事件发生时调用的方法内部设置onClick处理程序是不必要的(并且它是不正确的)。你所需要的只是

public void imagePicker(){
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Open Resource File");
    // use existing window here, don't create a new one:
    File file = fileChooser.showOpenDialog(Defaultview.getScene().getWindow());
    if (file != null) {
        Defaultview.setImage(new Image(file.toURI().toString()));
    }
}

答案 1 :(得分:-1)

在JavaFx中,ImageView具有 setOnMouseClicked 属性,因此如果要使用fileChooser从PC导入图像,则需要向FileChooser添加扩展名以仅定义图像并跳过其他文件

 public void imagePicker(){
     FileChooser fileChooser = new FileChooser();
     FileChooser.ExtensionFilter extFilterJPG = new  FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
     FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
     fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);

    File ChooserFile = fileChooser.showOpenDialog(Defaultview.getScene().getWindow());//your owner
    if (ChooserFile != null) {

        Image image = new Image(ChooserFile.toURI().toString());

        Defaultview.setImage(image);
    }


  }

并将MouseEvent(setOnMouseClicked)添加到ImageView:

      Defaultview.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            imagePicker();
        }
    });