I'm developing a somewhat complex app with javaFx and I'm facing a technical decision concerning popups (tooltips, context menus, alerts... etc), it seems like I have two approaches to go about it:
- extend PopupWindow (or PopupControl), the popups will be rendering outside the application in their own undecorated window.
- wrap my whole app in a parent that supports fixed/absolute positioning and show/position popups as overplayed nodes.
I know this seems a bit opinion based but i just can't find any resources on it, if anyone done some profiling or a performance comparison, and I don't know which one is "best-practice" for a desktop application.
It intuitively seems like the window popup approach is favoured and easier to implement but I've seen real applications like messenger and discord using the second approach (maybe because they're using electron and they're obliged to follow "the web way" of doing things).
any help would be appreciated.
UPDATE
I'm back to add my input on this question after trying to implement the ideas, just in case anyone comes by this question with the same issues.
both approaches come with limitations and I came across the following issues :
Tooltips blocking mouse events
If you build your tooltip system around PopupControl (or PopupWindow) and you want your tooltips to have a shadow around them, the tooltip (or the shadow) will block the mouse events from reaching the nodes in the application window, and because you can't make the window transparent to mouse events, it would cause some flickering (you hover a node, tooltip shows then steals mouse events which causes a MouseExited event on the node, which causes the tooltip to hide, and it happens endlessly unless you move the mouse away)
This issue is essentially caused by the shadow, building your tooltips around a layout (VBox, for instance) and adding to tooltip to the root of the scene will solve this issue, because you can simply make the tooltip mouse transparent.
Popups having to show outside the application window
in some situations you may have a popup/context menu that has a somewhat fixed position, say it has to show under a specific node and it can't be re-positioned inside the application window, if you build your context menus around a layout that gets added to the scene root, your context menus might have to clip at some places.
This issue is naturally solved if your popups are based on PopupControl or PopupWindow.