2016-04-25 45 views
1

我正在製作圖片庫。我正在使用javafx 8以及GUI的場景生成器。我希望用戶可以選擇從圖庫中選擇圖像:我想在圖庫中添加可點擊和可選的圖像。我也想記錄那些選擇的圖像的順序,即哪一個先被選擇,哪一個是最後被選擇的。我做了這個畫廊,但是我想知道我會怎麼做才能使圖像可點擊並獲取圖像,並注意到它們的順序?我不想在圖像上使用複選框。如何從javafx中的圖庫中選擇圖像?

回答

0

你可以在每個ImageView的添加setOnMouseClicked處理程序。

這裏是我的意思一個代碼示例:正如我說我也想說明點擊圖像序列

public class ClickableImage extends Application { 

    private ArrayList<String> clickedImages = new ArrayList<>(); 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) {  
     String imgUrl = getClass().getResource("image.png").toExternalForm(); 
     assert imgUrl != null; 
     Image img = new Image(imgUrl); 
     assert img != null; 

     BorderPane root = new BorderPane(); 
     ImageView imgView = new ImageView(img); 
     imgView.setUserData(imgUrl); 
     root.setCenter(imgView); 

     Scene scene = new Scene(root, 600, 400); 

     primaryStage.setScene(scene); 
     primaryStage.setTitle("ClickableImage"); 
     primaryStage.show(); 

     //------------- 

     imgView.setOnMouseClicked(e -> { 
      String clickedImgUrl = (String)((ImageView)e.getSource()).getUserData(); 
      System.out.println("Image was clicked: " + clickedImgUrl); 
      clickedImages.add(clickedImgUrl); 
     });     
    } 
} 
+0

所以我怎麼能獲得點擊的ImageView同時使用setOnMouseClicked爲ImageView的不動作事件工作 –

+0

我不得不承認,我不明白你的問題是什麼。將處理程序附加到所有圖像視圖後,每次單擊圖像時都會調用此處理程序。現在最簡單的方法就是從事件對象獲取源代碼(ImageView),並從中獲取包含的圖像,然後將其存儲在ArrayList中。這個列表的內容然後描述了你點擊的順序。那是你想要的還是我誤解了你? – mipa

+0

是的,你是絕對正確的,但setOnMouseClicked不會返回源代碼。在給定的代碼中,extendedImage是我的類,它擴展了圖像類並添加了一個額外的圖像ID功能。給定的代碼給出錯誤,我無法通過ActionEven圖像作爲參數,我不能得到源,,,,,,,, 公共無效的setValue(ActionEvent的圖像){ 點擊++; ImageView clickedImageView =(ImageView)image.getSource(); extendedImage clickedImage =(extendedImage)clickedImageView.getImage(); int imageId = clickedImage.getId(); clickedImageId.add(imageId); } –

相關問題