2016-03-01 20 views
0

我有一個TilePane其中每個單元(瓦)包含影片的圖像,以FE:enter image description hereJavaFX的TilePane什麼瓷磚用戶點擊

在Java中,它看起來是這樣的:

public void searchMovieBtn_Clicked(){ 

     searchmoviesTilePane.getChildren().clear(); 
     MoviesAPI mvAPI = new MoviesAPI(); 
     List<FilmSearchResult> filmInfoList = mvAPI.findFilm(searchmovieTextField.getText()); 

     Task task = new Task<Void>() { 
      @Override public Void call() { 
       for(int i=0; i<filmInfoList.size(); i++){ 
        updateProgress(i+1, filmInfoList.size()); 
        if(filmInfoList.get(i).getImageURL() != null) { 
         Image searchItemImage = new Image(filmInfoList.get(i).getImageURL()); 
         ImageView searchItemImageView = new ImageView(searchItemImage); 
         searchItemImageView.setPreserveRatio(true); 
         Platform.runLater(() -> { 
          searchmoviesTilePane.getChildren().add(searchItemImageView); 
         }); 
        } 
       } 

       return null; 
      } 
     }; 
     progressIndicator.progressProperty().bind(task.progressProperty()); 
     new Thread(task).start(); 
} 

我的目標是讓用戶能夠用特定的電影點擊「圖像」以顯示關於這部電影的更多細節。但我無法通過f.e.做到這一點。 getPickResultsintersectedNodes,因爲它只是一個圖像。我將感謝任何意見,我怎麼能實現此功能

編輯:

for(int j=0; j<searchmoviesTilePane.getChildren().size(); j++){ 
       searchmoviesTilePane.getChildren().get(j).setOnMouseEntered(e -> searchmoviesItem_MouseEntered(e.getPickResult().toString())); 
      } 

但下一步是什麼?我如何能夠找出用戶點擊的是什麼「圖像」?

+1

只是每個圖像視圖註冊鼠標監聽器... –

+0

是的,我能做到這一點,但接下來會發生什麼?假設我已經添加了「EDITED」段下的內容。問題是,我無法識別在'TilePane'中的'item'被點擊了 – user3529850

回答

3

只需註冊上的圖像視圖中的鼠標監聽:

Task task = new Task<Void>() { 
    @Override public Void call() { 
     for(int i=0; i<filmInfoList.size(); i++){ 
      updateProgress(i+1, filmInfoList.size()); 
      if(filmInfoList.get(i).getImageURL() != null) { 
       FilmSearchResult film = filmInfoList.get(i); 
       Image searchItemImage = new Image(film.getImageURL()); 
       ImageView searchItemImageView = new ImageView(searchItemImage); 
       searchItemImageView.setPreserveRatio(true); 

       searchItemImageView.setOnMouseClicked(e -> showDetails(film)); 

       Platform.runLater(() -> { 
        searchmoviesTilePane.getChildren().add(searchItemImageView); 
       }); 
      } 
     } 

     return null; 
    } 
}; 


// .... 

private void showDetails(FilmSearchResult film) { 
    // show details for film... 
}