On Sat, 21 Mar 2026 23:19:44 GMT, Marius Hanl <[email protected]> wrote:

> Very similar to https://github.com/openjdk/jfx/pull/1829, this PR removes the 
> questionable behavior that the `MouseEventFirer` may create a temporary 
> `Stage` for your `Node`.
> 
> Take the following test code:
> 
> Button button = new Button("Button");
> MouseEventFirer mouse = new MouseEventFirer(button);
> mouse.fireMousePressAndRelease();
> mouse.fireMousePressAndRelease();
> mouse.dispose()
> 
> What it does is to create a `Stage` in the first method. The second method 
> does not. This is not immediately clear.
> That is also the reason why the dispose method exists. To MAY clean it up. Or 
> forget to call it.
> 
> This does not test a realistic scenario and the chance is quite high that 
> developers used that methods without even knowing that it contains such logic.
> 
> So the idea is to remove the StageLoader code from MouseEventFirer and rather 
> use it in the Test code before calling the Util methods.
> 
> For the example above, this would result in:
> 
> Button button = new Button("Button");
> stageLoader = new StageLoader(button );
> MouseEventFirer mouse = new MouseEventFirer(button);
> mouse.fireMousePressAndRelease();
> mouse.fireMousePressAndRelease();
> 
> 
> There were only two real tests that did not have a `Stage` yet. So most of 
> the tests already had a good setup and this could never run.

modules/javafx.controls/src/test/java/test/com/sun/javafx/scene/control/infrastructure/MouseEventFirer.java
 line 138:

> 136: 
> 137:         if (node.getScene() == null || node.getScene().getWindow() == 
> null) {
> 138:             throw new IllegalArgumentException("Node: " + node + " must 
> be in a Scene and Window " +

maybe instruct to use StageLoader instead, addin an example in the comments?
something like this:

// The target node must be in a Scene and Window, example:
// private StageLoader sl;
// ..
// sl = new StageLoader(node);
// ...
// sl.dispose()
if (node.getScene() == null || node.getScene().getWindow() == null) {
            throw new IllegalArgumentException("Target node must be in a Scene 
and Window (use StageLoader?)");

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/2124#discussion_r2977473382

Reply via email to