<Swing Dev> Review request for 4473075: JTable header rendering problem (after setting preferred size)
Semyon Sadetsky
semyon.sadetsky at oracle.com
Wed Mar 4 12:49:33 UTC 2015
Hi Sergey,
Thank you for another fast review.
all comments are accepted exept for this:
> - The test can iterate over all supported l&f.
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.
--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