javafx - Access actions in embed FXML -
structure of application approximately mainapplication->superfxmlcontroller->childfxmlcontroller. every childfxml has button add 1 more child element gridpane in superfxml have defined buttonhandler method in childfxmlcontroller action should happening in superfxmlcontroller (add new row in grid). question how handle action superfxmlcontroller?
here code details: addlogrecordcontroller.java (so called "superfxmlcontroller"):
@fxml private void initialize() throws ioexception { rowindex = 0; fxmlloader loader = new fxmlloader(getclass().getresource("recordgrid.fxml")); maingrid.add(loader.load(), 0, rowindex++); recordgridcontroller controller = (recordgridcontroller) loader.getcontroller(); controller.setsupercontroller(this); } ... public void addrowhandle() { try { fxmlloader loader = new fxmlloader(getclass().getresource("recordgrid.fxml")); maingrid.getchildren().add(loader.load()); recordgridcontroller controller = loader.getcontroller(); } catch (ioexception e) { e.printstacktrace(); } }
"recordgridcontroller" referred "childfxmlcontroller":
private addlogrecordcontroller supercontroller; ... public void setsupercontroller(addlogrecordcontroller addlogrecordcontrollerclass) { this.supercontroller = addlogrecordcontrollerclass; } ... @fxml private void addrowhandler() { supercontroller.addrowhandle(); }
and result window section surrounded red child fxml should duplicated many times button add qso pressed:
ok, made should plan. have add following method in supercontroller:
private void loadrecordgrid(int rowindex) { try { fxmlloader loader = new fxmlloader(getclass().getresource("recordgrid.fxml")); maingrid.add(loader.load(), 0, rowindex); recordgridcontroller controller = (recordgridcontroller) loader.getcontroller(); controller.initialize(this); } catch (ioexception e) { e.printstacktrace(); } }
and method initialize this:
@fxml private void initialize() { rowindex = 0; loadrecordgrid(rowindex++); }
and method addrowhandler this:
public void addrowhandle() { loadrecordgrid(rowindex++); }
in childcontroller:
private addlogrecordcontroller supercontroller; @fxml public void initialize(addlogrecordcontroller supercontroller) { this.supercontroller = supercontroller; } @fxml private void addrowhandler() { supercontroller.addrowhandle(); }
do not know, maybe can done more efficient way, works now. need figure how pass values of textfields child parent , back
Comments
Post a Comment