2017-08-24 5 views
0

FXMLを使用してイメージビュー内のイメージを変更し、イメージを変更するfileChooserを開いて古いイメージを置き換えるイメージを選択するには、今すぐ2つの問題があります。FXML/JavaFX ImageViewをクリック可能にする方法は?

ImageViewの作成方法

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

と私は

からそれを変更したい画像の変更のため:クリッカブルこれは私が持っている私のFXMLファイルでこの

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

のために使っていたコードです

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

to the Image選択しました。

+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ハンドラを設定する必要はありません(それは間違っています)。必要なのは、JavaFXのImageViewので

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

プロパティをsetOnMouseClickedたので、あなたは、ファイルチューザを使用してPCから画像をインポートする場合は、あなただけの画像を定義するために、あなたのファイルチューザに拡張を追加に必要とされますあなたのImageViewのに他のファイル

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)をスキップ:

 Defaultview.setOnMouseClicked(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      imagePicker(); 
     } 
    }); 
関連する問題