<Swing Dev> Review request for 4473075: JTable header rendering problem (after setting preferred size)
Semyon Sadetsky
semyon.sadetsky at oracle.com
Tue Mar 3 13:53:42 UTC 2015
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