<Swing Dev> Review request for 4473075: JTable header rendering problem (after setting preferred size)
Sergey Bylokhov
Sergey.Bylokhov at oracle.com
Wed Mar 4 20:28:41 UTC 2015
On 04.03.2015 17:58, Semyon Sadetsky wrote:
> the updated webrev
> http://cr.openjdk.java.net/~alexsch/semyon-sadetsky/4473075/webrev.03/
This version looks good.
>> At first do you know l&f that use anther than BasicTableHeaderUI
>> getPreferredSize() definition?
>> And second changing the l&f affects nothing because the overridden
>> JTableHeader.getPrefferedSize() always takes preferred size form the
>> assigned UI.
>> In the previous code the UI preferred size could be masked completely
>> but now only height can be masked and width is transparently passed
>> from the UI. I don't see how the change can degrade the UI
>> compatibility.
This is not only about a test coverage but about test stability. There
is an assumtion that the test will complete successfully on all
supported looks and feels, if the l&f was not set explicitly. Note that
our sqe team sometimes run all tests using non-default look and feel(gtk
for example), and the test can fail just because of the small difference
in the components layout(especially if the test uses some constant)
>>
>> --Semyon
>>
>> On 3/4/2015 2:58 PM, Sergey Bylokhov wrote:
>>> Hi, Semyon.
>>> A few notes:
>>> - Please rephrase "Returns a preferred size of the TableHeader".
>>> Use the class name JTableHeader or something like this: "Returns the
>>> table header's...."
>>> - The frame should be disposed at the end of the test.
>>>
>>> Small issues, not necessary to be fixed:
>>> - You can add @override to the new method
>>> - The test can iterate over all supported l&f.
>>>
>>> On 03.03.2015 16:53, Semyon Sadetsky wrote:
>>>> synchronization is not necessary because the invokeAndWait() method
>>>> guarantee that the variable will never be accessed from EDT after it.
>>>>
>>>> On 3/3/2015 4:45 PM, Alexander Scherbatiy wrote:
>>>>> On 3/3/2015 3:30 PM, Semyon Sadetsky wrote:
>>>>>> http://cr.openjdk.java.net/~alexsch/semyon-sadetsky/4473075/webrev.02/
>>>>>>
>>>>>>
>>>>>> null check is not needed because isPreferredSizeSet() is true
>>>>>> only if preferred size is not null.
>>>>>> Others are accepted.
>>>>> The point field is used both on the main and EDT thread in the
>>>>> test. There should be proper synchronization to the fields access.
>>>>>
>>>>> Otherwise the fix looks good to me.
>>>>>
>>>>> Thanks,
>>>>> Alexandr.
>>>>>
>>>>>>
>>>>>>
>>>>>> On 3/3/2015 1:09 PM, Alexander Scherbatiy wrote:
>>>>>>>
>>>>>>> The fix looks good to me.
>>>>>>>
>>>>>>> Just few comments:
>>>>>>> - Check that getPreferredSize() can't return null if prefferd
>>>>>>> size is set
>>>>>>> - extra empty lines 442 and 463 are unnecessary
>>>>>>> - scpScroll.getHorizontalScrollBar() call (line 69) in the
>>>>>>> test is called on the main thread. It should be called on EDT.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Alexandr.
>>>>>>>
>>>>>>> On 3/2/2015 4:11 PM, Semyon Sadetsky wrote:
>>>>>>>> Regression test scenario was added. Please review the fix.
>>>>>>>>
>>>>>>>> webrev:
>>>>>>>> http://cr.openjdk.java.net/~alexsch/semyon-sadetsky/4473075/webrev.01/
>>>>>>>>
>>>>>>>>
>>>>>>>> 2Sergey:
>>>>>>>> the garbage mentioned comments in the JBS is not reproducible
>>>>>>>> anymore. In any case it is another problem than the described
>>>>>>>> in the bug header. The fix solves the original issue.
>>>>>>>>
>>>>>>>>
>>>>>>>> On 2/27/2015 4:47 PM, Semyon Sadetsky wrote:
>>>>>>>>> Hi Sergey,
>>>>>>>>>
>>>>>>>>> It really depends on a point of view.
>>>>>>>>> There is a comment in the ViewportLayout.java that states that
>>>>>>>>> it is an expected behaviour:
>>>>>>>>> /* If the new viewport size would leave empty space to the
>>>>>>>>> * right of the view, right justify the view or left justify
>>>>>>>>> * the view when the width of the view is smaller than the
>>>>>>>>> * container.
>>>>>>>>> */
>>>>>>>>> ==
>>>>>>>>> Semyon
>>>>>>>>>
>>>>>>>>> On 2/27/2015 4:06 PM, Sergey Bylokhov wrote:
>>>>>>>>>> Hi, Semyon.
>>>>>>>>>> Can you clarify the comment below from the CR. Is the actual
>>>>>>>>>> bug in JTableHeader and not in JScrollPane? Especially
>>>>>>>>>> consider, that the behavior changes by different modes of a
>>>>>>>>>> JScrollPane.
>>>>>>>>>>
>>>>>>>>>> "This problem isn't unique to JTableHeader. For example,
>>>>>>>>>> consider the test case I've attached, Bug2.java. Run it the
>>>>>>>>>> same way, resized so that the label header component shows
>>>>>>>>>> "..." at the end, and then scroll.
>>>>>>>>>>
>>>>>>>>>> This appears to be a problem with how JScrollPane treats any
>>>>>>>>>> header component with a fixed size like this. There are two
>>>>>>>>>> things here:
>>>>>>>>>>
>>>>>>>>>> First, I don't understand why garbage is allowed to show up.
>>>>>>>>>> We at least need to fix this. Second, perhaps JScrollPane
>>>>>>>>>> needs to do better to ensure that the header is large enough
>>>>>>>>>> to match the scrollable content."
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Also I think it is possible to write a test for this issue.
>>>>>>>>>>
>>>>>>>>>> -----semyon.sadetsky at oracle.com wrote:
>>>>>>>>>>
>>>>>>>>>>> Hello,
>>>>>>>>>>>
>>>>>>>>>>> please review a fix for JDK 9.
>>>>>>>>>>>
>>>>>>>>>>> Bug:https://bugs.openjdk.java.net/browse/JDK-4473075
>>>>>>>>>>> Webrev:
>>>>>>>>>>> http://cr.openjdk.java.net/~alexsch/semyon-sadetsky/4473075/webrev.00/
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> The thing is the general logic of the viewport layout
>>>>>>>>>>> requires the
>>>>>>>>>>> right
>>>>>>>>>>> component size which is requested by the getPreferredSize
>>>>>>>>>>> call to the
>>>>>>>>>>>
>>>>>>>>>>> child component.
>>>>>>>>>>> The right width of JTableHeader should be calculated in its
>>>>>>>>>>> UI but if
>>>>>>>>>>>
>>>>>>>>>>> user sets the preferred size manually it makes the
>>>>>>>>>>> calculated size
>>>>>>>>>>> invisible outside the component. User may need to set
>>>>>>>>>>> preferred size
>>>>>>>>>>> in
>>>>>>>>>>> order to adjust header height but in
>>>>>>>>>>> setPreferredSize(Dimension) the
>>>>>>>>>>> header width is adjusted as well.
>>>>>>>>>>> The fix solution overrides JComponent::getPreferredSize in
>>>>>>>>>>> JTableHeader
>>>>>>>>>>> with the logic returning the right width while preserving
>>>>>>>>>>> the height
>>>>>>>>>>> adjustable for user.
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
--
Best regards, Sergey.
More information about the swing-dev
mailing list