<Swing Dev> Review request for 4473075: JTable header rendering problem (after setting preferred size)

Semyon Sadetsky semyon.sadetsky at oracle.com
Mon Mar 16 10:09:17 UTC 2015


javadoc to the introduced JTableHeader.getPreferredSize() was changed 
according to Phil's corrections:
The last webrev: 
http://cr.openjdk.java.net/~alexsch/semyon-sadetsky/4473075/webrev.04/

>
>
> On 3/4/2015 11:28 PM, Sergey Bylokhov wrote:
>> 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.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>>
>




More information about the swing-dev mailing list