On Wed, 26 Nov 2025 15:55:50 GMT, Andy Goryachev <[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").
>> 
>> ### PopupW...
>
> modules/javafx.graphics/src/main/java/javafx/stage/Stage.java line 325:
> 
>> 323:      * @since 26
>> 324:      */
>> 325:     public final void show(double anchorX, double anchorY, AnchorPoint 
>> anchor) {
> 
> would it make more sense to move these new methods to `Window`, so they can 
> also work for the `Popup` and its hierarchy ?

`PopupWindow` works differently, it has a `anchorLocation` property which is a 
bit limited. We also couldn't move `PopupWindow.AnchorLocation` anywhere else 
(as this would be a breaking change), which would make the signature of the 
show() method very awkward: On `Stage.show(x, y, PopupWindow.AnchorLocation)` 
you'd have a parameter that is declared on an unrelated class.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1986#discussion_r2565651731

Reply via email to