javafx - Comfortable mappings -


i have grid in show different images. when user clicks on image, event should fired. code looks this:

<gridpane alignment="center" hgap="10" vgap="10">     <imageview          fx:id="cell1" fitheight="90" fitwidth="70"          gridpane.columnindex="0" gridpane.rowindex="0"         onmouseclicked="#previewclicked1" />     <imageview          fx:id="cell2" fitheight="90" fitwidth="         gridpane.columnindex="1" gridpane.rowindex="0"         onmouseclicked="#previewclicked2"/>     [...] </gridpane> 

i have 20 of these cells. need create imageview object , event method every 1 of these objects? e.g. isn't there way object has been clicked?

the best option in java, rather in fxml. fxml be

<gridpane fx:id="imagepane" alignment="center" ... > </gridpane> 

now in controller's initialize() method define imageviews:

public class mycontroller {      @fxml     private gridpane imagepane ;      public void initialize() {          int numcolumns = ... ;         int numrows = ... ;         (int col = 0; col < numcolumns; col++) {             (int row = 0; row < numrows; row++) {                 imageview imageview = new imageview();                 imagepane.add(imageview, col, row);                 imageview.setonmouseclicked(e -> {                     // handle click image...                 });             }         }      } } 

this way less code in total anyway (since fxml smaller), , can readily organize image views array if need, etc.

if want define image views in fxml, 1 one, can source of event in event handler. don't approach because of necessary downcast, can potentially make brittle if change things @ later stage. however:

@fxml private void previewclicked(mouseevent event) {     imageview clickedimage = (imageview) event.getsource();     // ... } 

and set onmouseclicked="#previewclicked" imageviews. still have laboriously define imageviews in fxml, 1 one, though.


Comments