2017-08-24 425 views
0

我想用FXML改变图像查看图像和改变图像我打开文件选择挑选一个形象,应该取代旧的,我有2个问题,现在:FXML/JavaFX如何使ImageView可点击?

如何使ImageView的点击这是我使用这个

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

你为什么只是删除FXML?为什么你删除我的格式更正? –

回答

2

ImageView没有onAction属性(所以我认为在加载FXML文件时应该会出现运行时错误)。如果你想响应鼠标的点击,那么你应该使用onMouseClicked

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

中注册FXML事件处理程序意味着,imagePicker()方法当事件发生时(被调用即当用户点击图片查看)。从onClick事件发生时调用的方法中设置onClicked处理程序是没有必要的(也是不正确的)。所有你需要的是

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

在JavaFX的ImageView已setOnMouseClicked属性,因此,如果你想使用文件选择器从PC导入图像,你需要扩展添加到您的文件选择定义仅适用于图像和跳过其他文件

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(); 
     } 
    });