2017-08-24 199 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(); 
     } 
    });