This PR changes how the BorderLayout positions components when they don't fit 
inside a container.

This should have no effect on BorderLayouts that match or exceed their 
preferred size.

(The name of this PR/ticket is a little misleading: this in no way relates to 
`component.getMinimumSize()`.)

Here is part of a comment in that ticket that sums up what this PR is trying to 
fix:
> Instead of the South Component being placed partially offscreen as Windows 
> does, it is often placed on top of the North Component. Indeed, 
> BorderLayout.layoutContainer() always places the South Component flush with 
> the bottom of the Container and does not check if the Container is smaller 
> than the minimum size, or if the North and South Components overlap.

Previously child components could:
A. be assigned negative (x,y) coordinates
B. be assigned negative widths or heights
C. overlap other child components
D. be assigned dimensions that don't fit inside the target container

This PR will instead constrain certain values. Now child components may be 
given a width/height of zero pixels, but they should never show the 4 behaviors 
stated above.

We encountered this basic problem last week at work (we could end up with a 
component with a negative height). Our work-around was more complex than this 
PR: we wrote a modified BorderLayout that would switch to using 
`component.getMinimumSize()` when the preferred size wouldn't fit. IMO that is 
a better option all-around, but it is dangerously invasive for an OpenJDK 
proposal. I'm happy to discuss that idea further, though, if anyone here 
disagrees.

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

Commit messages:
 - 4811995: trivial formatting for PR review
 - 4811995: constraining BorderLayout math to prevent negative values
 - 4811995: adding baseline unit test
 - Merge branch 'master' of https://github.com/mickleness/jdk
 - Merge branch 'master' of https://github.com/mickleness/jdk
 - Merge branch 'openjdk:master' into master
 - Merge branch 'openjdk:master' into master
 - Merge branch 'openjdk:master' into master
 - Merge pull request #5 from openjdk/master
 - Merge pull request #4 from openjdk/master
 - ... and 3 more: https://git.openjdk.org/jdk/compare/128f2d1c...c30f1803

Changes: https://git.openjdk.org/jdk/pull/24772/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24772&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-4811995
  Stats: 277 lines in 2 files changed: 264 ins; 0 del; 13 mod
  Patch: https://git.openjdk.org/jdk/pull/24772.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24772/head:pull/24772

PR: https://git.openjdk.org/jdk/pull/24772

Reply via email to