On Tue, 7 Apr 2026 17:10:04 GMT, Thiago Milczarek Sayao <[email protected]> wrote:
>> So the NPE is gone, very good. >> >> What is not yet clear to me is how it chooses where to show the alert when >> the parent Stage is not shown. Arguably, this is not a good state, so I'd >> expect the alert to show maybe at the center of the screen (which screen, >> btw, if we have two?) >> >> So, using this reproducer >> https://github.com/andy-goryachev-oracle/Test/blob/main/src/goryachev/bugs/Alert_NPE_8380926.java >> >> where the NPE button focuses on a different stage before showing up the >> alert, I get the following picture (top menu / bottom dock is trimmed). >> Before clicking on the NPE button, I moved both of the windows from their >> original positions: >> >> <img width="1793" height="1068" alt="Screenshot 2026-04-07 at 09 27 30" >> src="https://github.com/user-attachments/assets/7119302a-6963-46ae-be8c-37d88f8aae1e" >> /> >> >> What I see is the alert showing up not at the center of the screen but >> somewhere closer to the top side of the screen. >> Similarly, if I move both stages to a different screen, the alert still >> appears on the primary screen. >> >> Why is that? > > @andy-goryachev-oracle > > I think it is the default behaviour. Y is placed on 1/3 of the screen. > > From `Window.java`: > > > private static final float CENTER_ON_SCREEN_X_FRACTION = 1.0f / 2; > private static final float CENTER_ON_SCREEN_Y_FRACTION = 1.0f / 3; > > /** > * Sets x and y properties on this Window so that it is centered on the > * current screen. > * The current screen is determined from the intersection of current > window bounds and > * visual bounds of all screens. > */ > public void centerOnScreen() { > xExplicit = false; > yExplicit = false; > if (peer != null) { > Rectangle2D bounds = getWindowScreen().getVisualBounds(); > double centerX = > bounds.getMinX() + (bounds.getWidth() - getWidth()) > * CENTER_ON_SCREEN_X_FRACTION; > double centerY = > bounds.getMinY() + (bounds.getHeight() - getHeight()) > * CENTER_ON_SCREEN_Y_FRACTION; > > x.set(centerX); > y.set(centerY); > peerBoundsConfigurator.setLocation(centerX, centerY, > CENTER_ON_SCREEN_X_FRACTION, > CENTER_ON_SCREEN_Y_FRACTION); > applyBounds(); > } > } > > > I remember seeing some change about not moving parent window with the modal > on macos. Thank you @tsayao , good to know. Looks like this is a perfectly acceptable behavior, given that an alert with a non-visible Stage is a bad scenario to begin with. ------------- PR Comment: https://git.openjdk.org/jfx/pull/2127#issuecomment-4200903035
