But a PopupWindow would be detached from the pane? Not sure if that is what I
envision, but I'll give it a go and see what it looks like.
Your event filter does work though for what I need now.
Thanks!
On 2014-6-9 10:41, Martin Sladecek wrote:
Oh, I see. So it's not a PopupWindow at all.
Events can pass only though parent-child hierarchy, so you can't catch an Event in your
"circular menu" pane and then pass it to some other children of the parent
StackPane. The menu pane would have to be parent of the controls in the StackPane.
So again, you'd need RT-20184 to determine the target again by temporarily
making the menu pane mouse transparent, doing Scene.pick and then redirecting
the Event by Event.fireEvent().
But I think reworking you menu to be a PopupWindow should work. The transparent
areas in the circular menu should pass mouse events to the underlying window.
-Martin
On 06/09/2014 10:20 AM, Tom Eugelink wrote:
Or to see in in action with a single java -jar statement, download the samples
from.
http://jfxtras.org/
On 2014-6-9 10:13, Martin Sladecek wrote:
OK, so to avoid further confusion, you have a PopupWindow with a Pane and you
want to capture Events on the Pane and sent those events to the underlying
controls (in a parent window) if those events are not relevant to that popup?
Thanks,
-Martin
On 06/09/2014 10:07 AM, Tom Eugelink wrote:
Hm, maybe I chose bad words; I'm not using Canvas, but just a Pane. Since the Pane is
only used to draw the menu on when it need to appear, I'm calling it the canvas pane, as
in "what is painted on".
On 2014-6-9 9:46, Martin Sladecek wrote:
Just looked at the code and it seems Canvas does pick on bounds independently
of the pickOnBounds value. There's currently no logic for picking only when
over an opaque pixel ( worth filing a JIRA issue maybe?). This makes Canvas to
consume everything as it's always picked instead of some controls underneath.
Unfortunately, I can't think of any solution that would work right now. If we'd support
Node picking (https://javafx-jira.kenai.com/browse/RT-20184), it would be possible to
"redirect" an unwanted event to a different event target on that mouse position.
-Martin
On 06/09/2014 08:44 AM, Tom Eugelink wrote:
Yessss. It does not work on the canvas pane, I suspect because of the
pickOnBounds, but it does work on the stackpane. Plus, I can register to the
stack pane without claiming the onMouseClick/Press hook.
Many thanks!
Tom
On 2014-6-9 8:29, Martin Sladecek wrote:
Hi Tom,
have you tried .addEventFilter() method? It receives the Event before the
controls underneath the canvas, in the capturing phase. If you don't consume
the Event, it should pass down to the controls.
For more on the topic, see
http://docs.oracle.com/javafx/2/events/processing.htm or
http://parleys.com/play/514892290364bc17fc56c39f
-Martin
On 06/09/2014 08:19 AM, Tom Eugelink wrote:
Hi all,
Maybe someone has solved this already, so I thought I pop the question.
Currently I'm working on CirclePopupMenu; a menu that is supposed to pop up on
any place in a scene when a certain (usually the middle or right) mouse button
is pressed.
Right now CirclePopupMenu requires a stackpane to which it binds itself. CirclePopupMenu
initially places an empty "canvas" Pane on the stack pane, and will use that to
render and position the menu when it needs to appear.
Also I need to monitor the mouse to detect if the menu should appear. In order
to do that, I would like to use that canvas pane, but then any non relevant
button clicks will not reach the underlying controls. In order to enable
correct behavior I need to setPickOnBounds(false) on the pane, but then it does
receive the mouse events anymore.
Is there any way to monitor mouse events but still pass them through to the
underlying controls? In Swing I did something similar and used a system level
mouse event hook.
Tom
PS: I'm not certain if the stackpane approach I've used is the best way to do
this. It does work expect the mouse button problem. But any suggestions are
welcome.