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
Post a Comment