This enhances the `Builder` pattern added in [JDK-8294535](https://bugs.openjdk.org/browse/JDK-8294535) with a new method `testUI` which allows passing a lambda expression or a method reference to create *the test UI window*.
The `PassFailJFrame` will automatically call the method on the EDT to create the UI, add it to the internal list of windows, install the window closing listener and finally position and show both the instructions and test UI. Alternatively, you can pass an already created window. The `main` method of a manual test could look as simple as a sequence of calls: public static void main(String[] args) throws Exception { PassFailJFrame.builder() .instructions(INSTRUCTIONS) .testUI(() -> createTestUI()) .build() .awaitAndCheck(); } where `createTestUI` returns a test UI window. ------------- Depends on: https://git.openjdk.org/jdk/pull/15660 Commit messages: - Remove trailing whitespace - Mark the Builder class final - Amend message in window closing handler - Use invokeOnEDT in getInstructionFrameBounds - Use functional style for disposing of windows - Use statically imported invokeAndWait and isEDT - Build functional test UI - Refactor windowClosing listener Changes: https://git.openjdk.org/jdk/pull/15665/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15665&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8294156 Stats: 125 lines in 1 file changed: 91 ins; 20 del; 14 mod Patch: https://git.openjdk.org/jdk/pull/15665.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/15665/head:pull/15665 PR: https://git.openjdk.org/jdk/pull/15665