<div dir="ltr">Hi,<div><br></div><div>Could anyone with a multi-screen setup on Mac and/or Windows please share the results of the two buttons on this sample app? Your feedback would be greatly appreciated!</div><div><div class="gmail-text-base gmail-my-auto gmail-mx-auto gmail-py-5 gmail-[--thread-content-margin:--spacing(4)] gmail-@[37rem]:[--thread-content-margin:--spacing(6)] gmail-@[70rem]:[--thread-content-margin:--spacing(12)] gmail-px-(--thread-content-margin)"><div class="gmail-[--thread-content-max-width:32rem] gmail-@[34rem]:[--thread-content-max-width:40rem] gmail-@[64rem]:[--thread-content-max-width:48rem] gmail-mx-auto gmail-flex gmail-max-w-(--thread-content-max-width) gmail-flex-1 gmail-text-base gmail-gap-4 gmail-md:gap-5 gmail-lg:gap-6 gmail-group/turn-messages gmail-focus-visible:outline-hidden" tabindex="-1"><div class="gmail-group/conversation-turn gmail-relative gmail-flex gmail-w-full gmail-min-w-0 gmail-flex-col gmail-agent-turn"><div class="gmail-relative gmail-flex-col gmail-gap-1 gmail-md:gap-3"><div class="gmail-flex gmail-justify-start"><div class="gmail-touch:-me-2 gmail-touch:-ms-3.5 gmail--ms-2.5 gmail--me-1 gmail-flex gmail-items-center gmail-p-1 gmail-select-none gmail--mt-1 gmail-duration-[1.5s] gmail-focus-within:transition-none gmail-hover:transition-none gmail-pointer-events-none gmail-[mask-image:linear-gradient(to_right,black_33%,transparent_66%)] gmail-[mask-position:100%_0%] gmail-[mask-size:300%_100%] gmail-motion-safe:transition-[mask-position] gmail-group-hover/turn-messages:pointer-events-auto gmail-group-hover/turn-messages:[mask-position:0_0] gmail-group-focus-within/turn-messages:pointer-events-auto gmail-group-focus-within/turn-messages:[mask-position:0_0] gmail-has-data-[state=open]:pointer-events-auto gmail-has-data-[state=open]:[mask-position:0_0]"><span class="gmail-"></span></div></div></div></div></div></div><div><br></div><div>On Ubuntu 24.04 the first button moves the Stage to the end of the first screen (bit weird). </div><div>The second work as expected, it gets moved to the start of the center of the last screen.</div><div><br></div><div>Thanks!</div><div><br></div><div><div style="background-color:rgb(30,31,34);color:rgb(188,190,196)"><pre style="font-family:"JetBrains Mono",monospace;font-size:9.8pt"><span style="color:rgb(207,142,109)">import </span>javafx.application.Application;<br><span style="color:rgb(207,142,109)">import </span>javafx.geometry.Pos;<br><span style="color:rgb(207,142,109)">import </span>javafx.geometry.Rectangle2D;<br><span style="color:rgb(207,142,109)">import </span>javafx.scene.control.Button;<br><span style="color:rgb(207,142,109)">import </span>javafx.scene.layout.VBox;<br><span style="color:rgb(207,142,109)">import </span>javafx.stage.Screen;<br><span style="color:rgb(207,142,109)">import </span>javafx.stage.StageStyle;<br><span style="color:rgb(207,142,109)">import </span>javafx.application.Platform;<br><span style="color:rgb(207,142,109)">import </span>javafx.scene.Scene;<br><span style="color:rgb(207,142,109)">import </span>javafx.scene.layout.StackPane;<br><span style="color:rgb(207,142,109)">import </span>javafx.scene.paint.Color;<br><span style="color:rgb(207,142,109)">import </span>javafx.stage.Stage;<br><br><span style="color:rgb(207,142,109)">import </span>java.util.Comparator;<br><br><span style="color:rgb(207,142,109)">public class </span>TestScreenBounds <span style="color:rgb(207,142,109)">extends </span>Application {<br><br>    @Override<br>    <span style="color:rgb(207,142,109)">public void </span>start(Stage stage) {<br>        stage.setTitle(<span style="color:rgb(106,171,115)">"Move Outside Bounds"</span>);<br>        Rectangle2D bounds = Screen.getScreens().stream()<br>                .map(Screen::getBounds)<br>                .sorted(Comparator.comparingDouble(Rectangle2D::getMaxX).reversed())<br>                .findFirst()<br>                .orElseThrow();<br><br>        Button btn = <span style="color:rgb(207,142,109)">new </span>Button(<span style="color:rgb(106,171,115)">"Move To " </span>+ bounds.getMaxX());<br>        btn.setOnAction(event -> stage.setX(bounds.getMaxX()));<br><br>        <span style="color:rgb(207,142,109)">double </span>middleLastScreen = bounds.getMinX() + bounds.getWidth() / <span style="color:rgb(42,172,184)">2</span>;<br><br>        Button btn2 = <span style="color:rgb(207,142,109)">new </span>Button(<span style="color:rgb(106,171,115)">"Move To " </span>+ middleLastScreen);<br>        btn2.setOnAction(event -> stage.setX(middleLastScreen));<br><br>        VBox root = <span style="color:rgb(207,142,109)">new </span>VBox(btn, btn2);<br>        root.setFillWidth(<span style="color:rgb(207,142,109)">true</span>);<br>        root.setAlignment(Pos.CENTER);<br>        Scene scene = <span style="color:rgb(207,142,109)">new </span>Scene(root, <span style="color:rgb(42,172,184)">300</span>, <span style="color:rgb(42,172,184)">300</span>);<br>        stage.setScene(scene);<br>        stage.show();<br>    }<br><br>    <span style="color:rgb(207,142,109)">public static void </span>main(String[] args) {<br>        launch(TestScreenBounds.<span style="color:rgb(207,142,109)">class</span>, args);<br>    }<br>}<br><br></pre></div></div></div></div>