<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