RFR: 8370446: Support dialogs with StageStyle.EXTENDED

Cormac Redmond duke at openjdk.org
Thu Oct 23 19:15:47 UTC 2025


On Tue, 21 Oct 2025 23:54:55 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:

> Adds the `Dialog.headerBar` property, which allows developers to specify a custom `HeaderBar` when the dialog uses the `EXTENDED` stage style. The property is ignored for all other stage styles.

I've found a layout issue when using HeaderBar in Dialogs. This only occurs when:

- you use a HeaderBar
- a preferred width is set on the DialogPane

When using HeaderBar (clipped):
<img width="400" height="132" alt="image" src="https://github.com/user-attachments/assets/cd179f8c-7ea4-4024-9b6b-a84aac09475c" />


When not using HeaderBar:
<img width="402" height="193" alt="image" src="https://github.com/user-attachments/assets/5fda8a0f-322c-42c5-bc82-e083f375a411" />


Code to reproduce:

public class DialogBugDemo extends Application {

    @Override
    public void start(Stage stage) {
        Button infoBtn = new Button("Show Two Alerts");
        infoBtn.setOnAction(e -> {
            showInfo(true); // With HeaderBar - content clipping issue
            showInfo(false); // Without HeaderBar - works fine
        });
        stage.setScene(new Scene(new VBox(10, infoBtn), 400, 300));
        stage.show();
    }

    private void showInfo(boolean withHeaderBar) {
        Alert alert = new Alert(AlertType.INFORMATION);
        alert.setHeaderText(null);

        // Set preferred width causing the issue to manifest, no issue without it
        alert.getDialogPane().setPrefWidth(400); // Comment out and bug goes away

        alert.getDialogPane().setContent(createVbox());

        // Display issues only occur when HeaderBar is set
        if (withHeaderBar) {
            alert.setHeaderBar(new HeaderBar());
            alert.initStyle(StageStyle.EXTENDED);
        }

        alert.show();
    }

    private  VBox createVbox() {
        TextFlow tf = new TextFlow(
                new Text("1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0; end of first TextFlow.")
        );

        TextFlow tf2 = new TextFlow(
                new Text("1 2 3 4 5 6 7 8 9 0 1 sdf 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0; end of second TextFlow.")
        );

        return new VBox(tf, new VBox(tf2));
    }

    public static void main(String[] args) {
        launch(args);
    }
}

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

PR Comment: https://git.openjdk.org/jfx/pull/1943#issuecomment-3438695394


More information about the openjfx-dev mailing list