Small addition; the 3520 button moved the top left of the Window to the middle of the right screen, but the window as a whole was not centered.
--John On 09/04/2025 13:22, John Hendrikx wrote: > > Hi Thiago, > > I ran this on Windows. My monitor setup is: > > Left: 3840x2160 (150%) -- top left coordinate (-2560, 0) (-2560 > because of scaling) > Middle: 3840x2160 (150%) -- this one has a top left coordinate of (0, 0) > Right: 1920x1200 (100%) -- this one has a top left coordinate of (2560, 0) > > When started, the program appeared perfectly centered on the middle > screen. > > Your program showed buttons: 4480 and 3520 > > The 4480 button moved the Window far too the right, off screen and I > had to stop the program > > The 3520 button moved the Window to the Right monitor, but it was not > centered nicely. > > I added a `peek(System.out::println)` on the screens stream. These > are my screens: > > Rectangle2D [minX=0.0, minY=0.0, maxX=2560.0, maxY=1440.0, > width=2560.0, height=1440.0] > > Rectangle2D [minX=2560.0, minY=-194.0, maxX=4480.0, maxY=1006.0, > width=1920.0, height=1200.0] > > Rectangle2D [minX=-2560.0, minY=6.0, maxX=0.0, maxY=1446.0, > width=2560.0, height=1440.0] > > --John > > On 09/04/2025 12:55, Thiago Milczarek Sayão wrote: >> Hi, >> >> 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! >> >> On Ubuntu 24.04 the first button moves the Stage to the end of the >> first screen (bit weird). >> The second work as expected, it gets moved to the start of the center >> of the last screen. >> >> Thanks! >> >> import javafx.application.Application; >> import javafx.geometry.Pos; >> import javafx.geometry.Rectangle2D; >> import javafx.scene.control.Button; >> import javafx.scene.layout.VBox; >> import javafx.stage.Screen; >> import javafx.stage.StageStyle; >> import javafx.application.Platform; >> import javafx.scene.Scene; >> import javafx.scene.layout.StackPane; >> import javafx.scene.paint.Color; >> import javafx.stage.Stage; >> >> import java.util.Comparator; >> >> public class TestScreenBounds extends Application { >> >> @Override >> public void start(Stage stage) { >> stage.setTitle("Move Outside Bounds"); >> Rectangle2D bounds = Screen.getScreens().stream() >> .map(Screen::getBounds) >> >> .sorted(Comparator.comparingDouble(Rectangle2D::getMaxX).reversed()) >> .findFirst() >> .orElseThrow(); >> >> Button btn = new Button("Move To " + bounds.getMaxX()); >> btn.setOnAction(event -> stage.setX(bounds.getMaxX())); >> >> double middleLastScreen = bounds.getMinX() + bounds.getWidth() / 2; >> >> Button btn2 = new Button("Move To " + middleLastScreen); >> btn2.setOnAction(event -> stage.setX(middleLastScreen)); >> >> VBox root = new VBox(btn, btn2); >> root.setFillWidth(true); >> root.setAlignment(Pos.CENTER); >> Scene scene = new Scene(root, 300, 300); >> stage.setScene(scene); >> stage.show(); >> } >> >> public static void main(String[] args) { >> launch(TestScreenBounds.class, args); >> } >> } >>