> This PR is a new take on a highly requested feature: JavaFX controls in the > header bar (see also #594 for an earlier iteration). > > This is a feature with many possible ways to skin the cat, and it has taken > quite a bit of effort to come up with a good user model. In contrast to the > previous iteration, the focus has shifted from providing an entirely > undecorated window to providing a window with a user-configurable header bar. > > The customizable header bar is a new layout container: > `javafx.scene.layout.HeaderBar`. It has three areas that accept child nodes: > leading, center, and trailing. `HeaderBar` also automatically adjusts for > the placement of the default window buttons (minimize, maximize, close) on > the left or right side of the window. > > The customizable header bar is combined with a new `EXTENDED` stage style, > which extends the client area into the header bar area. The new extended > stage style is supported on Windows, macOS, and Linux. For platforms that > don't support this stage style, it automatically downgrades to `DECORATED`. > > This is how it looks like on each of the three operating systems: > >  > > The window buttons (minimize, maximize, close) are provided by JavaFX, not by > the application developer. This makes it easier to get basic window > functionality without recreating the entirety of the window controls for all > platforms. > > ## Usage > This is a minimal example that uses a custom header bar with a `TextField` in > the center area. `HeaderBar` is usually placed in the top area of a > `BorderPane` root container: > > public class MyApp extends Application { > @Override > public void start(Stage stage) { > var headerBar = new HeaderBar(); > headerBar.setCenter(new TextField()); > > var root = new BorderPane(); > root.setTop(headerBar); > > stage.setScene(new Scene(root)); > stage.initStyle(StageStyle.EXTENDED); > stage.show(); > } > } > > To learn more about the details of the API, refer to the documentation of > `StageStyle.EXTENDED` and `HeaderBar`. > > ## Platform integration > The implementation varies per platform, and ranges from pretty easy to quite > involved: > 1. **macOS**: The window buttons are provided by macOS, we just leave an > empty area where the window buttons will appear. The client area is extended > to cover the entire window by setting the > `NSWindowStyleMaskFullSizeContentView` flag. A click-and-drag operation is > ini...
Michael Strauß has updated the pull request incrementally with one additional commit since the last revision: improve documentation ------------- Changes: - all: https://git.openjdk.org/jfx/pull/1605/files - new: https://git.openjdk.org/jfx/pull/1605/files/ba02e8f7..f973e8c5 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=1605&range=05 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1605&range=04-05 Stats: 13 lines in 1 file changed: 8 ins; 3 del; 2 mod Patch: https://git.openjdk.org/jfx/pull/1605.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1605/head:pull/1605 PR: https://git.openjdk.org/jfx/pull/1605