java - JavaFX key press not captured -


i trying capture key press events (page , down) there no key events received @ all. here relevant code: constructor:

private mainlayout() {     imageview = new imageview();     root = new stackpane();      root.getchildren().add(imageview);     root.setfocustraversable(true); //no effect     //root.requestfocus(); //also no effect     registerevents();  } 

both lines regarding focus don't have effect. stack pane directly added scene. there no other nodes scene->stackpane->imageview. able capture key events on scene, need them captured in stack pane

here registerevents(), other events captured fine!:

private void registerevents() {     onscroll onscroll = new onscroll();     root.setonscroll(onscroll);     onresize onresize = new onresize();     root.heightproperty().addlistener(onresize);     root.widthproperty().addlistener(onresize);     onmousedown onmousedown = new onmousedown();     root.setonmousepressed(onmousedown);     root.setonmousereleased((event) -> fitimage());     root.setondragover((event) -> dragover(event));     root.setondragdropped((event) -> dropfile(event));     root.setonkeypressed((event) -> {         log.debug("key captured.");         if(event.getcode() == keycode.page_up){             imageview.setimage(ip.prev());             event.consume();         } else if(event.getcode() == keycode.page_down){             imageview.setimage(ip.next());             event.consume();         }         if(event.isconsumed()){             fitimage();         }     }); 

i don't see log out put , break point not caught. how catch , handle key events correctly?

meanwhile found solution this answer. trick setfocustraversable(true) on imageview (child of stack pane). here working code:

@inject private mainlayout(imageprovider ip) {     this.ip = ip;      imageview = new imageview();     imageview.setfocustraversable(true);     imageview.requestfocus();      root = new stackpane();      root.getchildren().add(imageview);     registerevents(); } 

Comments