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