On Tue, 25 Nov 2025 18:58:14 GMT, Michael Strauß <[email protected]> wrote:

> This enhancement allows `Stage` to be placed on the screen similar to a popup 
> window, where a user-specified positioning anchors defines a point on the 
> stage that should coincide with a given location on the screen. For this 
> purpose, the following new methods are added to `Stage`:
> 
> 
> public class Stage {
>     public void relocate(AnchorPoint screenAnchor, AnchorPoint stageAnchor);
>     public void relocate(AnchorPoint screenAnchor, Insets screenPadding, 
> AnchorPoint stageAnchor, AnchorPolicy);
>     public void relocate(Screen, AnchorPoint screenAnchor, Insets 
> screenPadding, AnchorPoint stageAnchor, AnchorPolicy);
> }
> 
> 
> ## AnchorPoint
> `AnchorPoint` is a point that is either specified in absolute coordinates, or 
> relative to the screen or stage:
> 
> var anchor1 = AnchorPoint.proportional(0.5, 0.5); // center of the 
> screen/stage
> var anchor2 = AnchorPoint.absolute(100, 100); // absolute coordinates within 
> screen/stage
> 
> 
> For example, a stage that sits flush with the bottom-right corner of the 
> screen can be shown as follows:
> 
> var screenAnchor = AnchorPoint.proportional(1, 1); // or use the 
> AnchorPoint.BOTTOM_RIGHT constant
> var stageAnchor = AnchorPoint.proportional(1, 1);
> stage.relocate(screenAnchor, stageAnchor);
> stage.show();
> 
> 
> ## AnchorPolicy
> `AnchorPolicy` controls how the anchor may be adjusted when the preferred 
> placement doesn't fit within the screen bounds:
> 
> 
> public enum AnchorPolicy {
>     FIXED,
>     FLIP_HORIZONTAL,
>     FLIP_VERTICAL,
>     AUTO
> }
> 
> 
> * `FIXED`: always use the provided anchor; only adjust the resulting position 
> to fit within the screen.
> * `FLIP_HORIZONTAL`: if the preferred placement violates horizontal 
> constraints, try a horizontally flipped anchor (e.g. top-left to top-right) 
> before falling back to the original anchor.
> * `FLIP_VERTICAL`: likewise for vertical constraints.
> * `AUTO`: automatically choose the most suitable flip:
>    if only horizontal constraints are violated, acts like `FLIP_HORIZONTAL`;
>    if only vertical constraints are violated, acts like `FLIP_VERTICAL`;
>    if both are violated, try a diagonally flipped anchor (both axes) and pick 
> the placement that requires the least adjustment.
> 
> This is useful for popup-like behavior where you have a preferred "opening 
> direction", but want the window to flip to the opposite side of the reference 
> point when there isn’t enough space (e.g. "prefer below, but open above if 
> below doesn’t fit").
> 
> ### PopupWindow support
> The new `PopupWindow.anchorPolicy` property adds the same "flip the anchor 
> when it...

I will test and review this. Especially test with the scenarios where I used 
the workaround described in the mailing list. 
And give feedback accordingly (API and Functionality-wise).
Will probably take a bit, as there are some other things (like Direct3D12) on 
my list.

modules/javafx.graphics/src/main/java/javafx/stage/Stage.java line 1298:

> 1296:     @Override
> 1297:     public void centerOnScreen() {
> 1298:         relocationRequest = null; // cancel previous relocation request

As far as I understand, with the new anchor system, a center on screen can 
easily be achieved as well? I wonder if we could also deprecate this method 
instead. But not sure if I understand it correctly.

modules/javafx.graphics/src/main/java/javafx/stage/Stage.java line 1459:

> 1457:      * @since 26
> 1458:      */
> 1459:     public static final class Anchor {

This could be a record too

modules/javafx.graphics/src/main/java/javafx/stage/Window.java line 1120:

> 1118:                     }
> 1119: 
> 1120:                     // Give subclasses a chance to adjust the window 
> bounds

Unrelated to this Enhancement, but I wonder if the `centerOnScreen` line before 
could also be rewritten using this system (at one point). Now, it looks like he 
might be centering the `Window`, and then fix the bounds to something else, 
wasting some time.

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

PR Comment: https://git.openjdk.org/jfx/pull/1986#issuecomment-3585241787
PR Review Comment: https://git.openjdk.org/jfx/pull/1986#discussion_r2570081956
PR Review Comment: https://git.openjdk.org/jfx/pull/1986#discussion_r2563846982
PR Review Comment: https://git.openjdk.org/jfx/pull/1986#discussion_r2563859678

Reply via email to