Hi, Semyon.
The fix looks fine. Please confirm that regr/jck tests passed after the fix.
On 27.04.15 18:12, Semyon Sadetsky wrote:
Hello,
Please review JDK9 fix.
webrev: http://cr.openjdk.java.net/~ssadetsky/8001470/webrev.00/
bug: https://bugs.openjdk.java.net/browse/JDK-8001470
***ROOT CAUSE
The setVisible() call without pack() or setBounds() means set the
frame size to the initial window size. The initial window size usually
is the size to fit the window frame and title only, so the content
pane receives some width and zero height. Since GridLayout does not
limit minimum component size when doing layout under fixed size, the
components receive zero height. This situation we have right after the
setVisible(true) call.
Now we do call our pack() call to do layout of the fame which is
already visible. The pack() triggers getPreferedSize() calls for
components. Calculation of TextFileld preferred size is performed in
its View which setSize() method should be called. For an i18n text
filed the view is a complex data structure which requires the right
initialization. According to line 942 of the BasicTextUI class the
view initialization happens only when both component's width and
height equal to 0, which is an expected situation for the initial
layout call. But in our specific pack() call this never happens
because while the height is actually equals 0 the width is not,
because component received such size as the result of the previous
frame.setVisible() call. So the view.setSize() method is not called at
all and preferred size is calculated incorrectly, the zero height is
obtained particularly.
***SOLUTION
As a fix it is proposed to change condition in line 942 of the
BasicTextUI to OR to cover the scenario.
***TESTING
A test case for the scenario is added.
--Semyon
--
Best regards, Sergey.