<Swing Dev> [10][JDK-8178430] JMenu in GridBagLayout flickers when label text shows "..." and is updated

Semyon Sadetsky semyon.sadetsky at oracle.com
Wed Nov 15 18:53:36 UTC 2017


On 11/15/2017 09:29 AM, Sergey Bylokhov wrote:

> On 15/11/2017 08:58, Semyon Sadetsky wrote:
>> Hi Krishna& Sergey,
>>
>> The provided reg test passes on Ubuntu Linux before the fix.
>
> I have checked it on my Ubuntu and it always does not pass. If it pass 
> in your case then you should cooperate with Krishna and check what 
> happened.
>
>>
>> Yet, I have a question about the assumption I get from the proposed 
>> solution that any component  placed into GridBagLayout must have its 
>> getPrefferredSize() equals to its getMinimumSize() result. Do we have 
>> this assumption documented somewhere?
>
> There are no such restrictions that getMinimumSize() must return exact 
> value of getPrefferredSize(). It should return some reasonable value 
> instead of null, which can be considered as 1x1 by some layout 
> managers. In most cases the PrefferredSize is used for this purpose.
This doesn't correspond to what I see if add

menu.setMinimumSize(new Dimension(2,2));

After that the problem described in the bug comes back.
>
>>
>> --Semyon
>>
>>
>> On 11/15/2017 08:24 AM, Sergey Bylokhov wrote:
>>> Looks fine.
>>>
>>> On 15/11/2017 07:26, Krishna Addepalli wrote:
>>>> Hi Sergey,
>>>>
>>>> Per our conversation, I have added the volatile keyword to the 
>>>> Boolean flag. Here is the updated webrev: 
>>>> http://cr.openjdk.java.net/~kaddepalli/8178430/webrev04/
>>>>
>>>> Thanks,
>>>> Krishna
>>>>
>>>> -----Original Message-----
>>>> From: Krishna Addepalli
>>>> Sent: Wednesday, November 15, 2017 6:07 PM
>>>> To: Sergey Bylokhov <sergey.bylokhov at oracle.com>; 
>>>> swing-dev at openjdk.java.net
>>>> Subject: RE: <Swing Dev> [10][JDK-8178430] JMenu in GridBagLayout 
>>>> flickers when label text shows "..." and is updated
>>>>
>>>> Hi Sergey,
>>>>
>>>> I have modified the code as per your requests, and here is the 
>>>> updated webrev: 
>>>> http://cr.openjdk.java.net/~kaddepalli/8178430/webrev03/
>>>>
>>>> However, I have a couple questions regarding the fix:
>>>> 1. Why was it considered good to fix it in BasicMenuUI rather than 
>>>> in BasicMenuUIItem?
>>>> 2. While using Robot.waitForIdle(), I came across the function 
>>>> "Suntoolkit.flushPendingEvents" function. But this is a private 
>>>> function and applications cannot use this. Is it expected that the 
>>>> applications should import the robot module to flush the events, 
>>>> considering that mostly it is used for testing purposes? If this is 
>>>> the case, then "Suntoolkit.flushPendingEvents" becomes a valuable 
>>>> tool, given that Swing rendering happens in an EDT that is separate 
>>>> from MainThread.
>>>>
>>>> Thanks,
>>>> Krishna
>>>>
>>>> -----Original Message-----
>>>> From: Sergey Bylokhov
>>>> Sent: Wednesday, November 15, 2017 2:23 AM
>>>> To: Krishna Addepalli <krishna.addepalli at oracle.com>; 
>>>> swing-dev at openjdk.java.net
>>>> Subject: Re: <Swing Dev> [10][JDK-8178430] JMenu in GridBagLayout 
>>>> flickers when label text shows "..." and is updated
>>>>
>>>> Hi, Krishna.
>>>> Small comments: I think that this code
>>>> "(JMenu)menuItem).isTopLevelMenu() == true"
>>>> can be simplified to
>>>> (JMenu)menuItem).isTopLevelMenu().
>>>>
>>>> In the test you create and dispose JFrame and other components 
>>>> outside of EDT thread. I suggest to use invokeAndWait() which will 
>>>> work synchronously. Instead of sleep() you van use 
>>>> Robot.waitForIdle();
>>>>
>>>>
>>>> On 12/11/2017 22:45, Krishna Addepalli wrote:
>>>>> Hi Sergey,
>>>>>
>>>>> Gentle reminder! Could you review the fix?
>>>>>
>>>>> Thanks,
>>>>> Krishna
>>>>>
>>>>> -----Original Message-----
>>>>> From: Krishna Addepalli
>>>>> Sent: Wednesday, November 8, 2017 8:22 PM
>>>>> To: Sergey Bylokhov <sergey.bylokhov at oracle.com>;
>>>>> swing-dev at openjdk.java.net
>>>>> Subject: RE: <Swing Dev> [10][JDK-8178430] JMenu in GridBagLayout
>>>>> flickers when label text shows "..." and is updated
>>>>>
>>>>> Hi Sergey,
>>>>>
>>>>> Are the changes fine now?
>>>>>
>>>>> Thanks,
>>>>> Krishna
>>>>>
>>>>> -----Original Message-----
>>>>> From: Krishna Addepalli
>>>>> Sent: Monday, November 6, 2017 9:02 PM
>>>>> To: Sergey Bylokhov <sergey.bylokhov at oracle.com>;
>>>>> swing-dev at openjdk.java.net
>>>>> Subject: RE: <Swing Dev> [10][JDK-8178430] JMenu in GridBagLayout
>>>>> flickers when label text shows "..." and is updated
>>>>>
>>>>> Hi Sergey,
>>>>>
>>>>> As per your recommendation I have done the following changes:
>>>>> 1. Moved the fix to BasicMenuUI.
>>>>> 2. Corrected the test to:
>>>>>     a. Access the UI elements only in the EDT.
>>>>>     b. Made sure that the main thread doesn't exit till the test 
>>>>> is complete.
>>>>>
>>>>> Here is the updated webrev:
>>>>> http://cr.openjdk.java.net/~kaddepalli/8178430/webrev02/
>>>>>
>>>>> However, I was wondering, why it is good to fix in BasicMenuUI? 
>>>>> Also, while writing the testcase, I couldnot find any 
>>>>> functionality like "flush" on the event queue, which will execute 
>>>>> all the pending events. Is it by design?
>>>>>
>>>>> Thanks,
>>>>> Krishna
>>>>>
>>>>> -----Original Message-----
>>>>> From: Sergey Bylokhov
>>>>> Sent: Friday, November 3, 2017 11:24 PM
>>>>> To: Krishna Addepalli <krishna.addepalli at oracle.com>;
>>>>> swing-dev at openjdk.java.net
>>>>> Subject: Re: <Swing Dev> [10][JDK-8178430] JMenu in GridBagLayout
>>>>> flickets when label text shows "..." and is updated
>>>>>
>>>>> Hi, Krishna.
>>>>> A few notes:
>>>>>     - Looks like the bug can be reproduced in JMenu only? Then it 
>>>>> will
>>>>> be good to fix it in BasicMenuUI, moreover it is already 
>>>>> implemented a
>>>>> getMaximumSize() in a similar way as in your fix.
>>>>>     - In the test some of the Swing components are accessed on 
>>>>> non-EDT
>>>>> thread. Also note that when you start the Thread you will exit
>>>>> invokeAndWait() and it is possible that the test will end before the
>>>>> Thread complete(jtreg will kill the test when the main thread is
>>>>> completed)
>>>>>
>>>>> On 31/10/2017 05:00, Krishna Addepalli wrote:
>>>>>> Hi Sergey,
>>>>>>
>>>>>> Thanks for pointing that out. Fixed the test case and created a new
>>>>>> webrev here: 
>>>>>> http://cr.openjdk.java.net/~kaddepalli/8178430/webrev01/
>>>>>>
>>>>>> Now, the testcase throws an exception and also after a few 
>>>>>> trials, closes on its own.
>>>>>>
>>>>>> Thanks,
>>>>>> Krishna
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Sergey Bylokhov
>>>>>> Sent: Tuesday, October 31, 2017 1:13 AM
>>>>>> To: Krishna Addepalli <krishna.addepalli at oracle.com>;
>>>>>> swing-dev at openjdk.java.net
>>>>>> Subject: Re: <Swing Dev> [10][JDK-8178430] JMenu in GridBagLayout
>>>>>> flickets when label text shows "..." and is updated
>>>>>>
>>>>>> Hi, Krishna.
>>>>>> Can you please clarify in what situation the test will stop 
>>>>>> working(it does not have any assertions)?
>>>>>>
>>>>>> On 27/10/2017 02:45, Krishna Addepalli wrote:
>>>>>>> Hi All,
>>>>>>>
>>>>>>> Please review the fix for bug:
>>>>>>>
>>>>>>>
>>>>>>> Bug: JDK-8178430: https://bugs.openjdk.java.net/browse/JDK-8178430
>>>>>>>
>>>>>>> Webrev: http://cr.openjdk.java.net/~kaddepalli/8178430/webrev00/
>>>>>>>
>>>>>>> Summary:
>>>>>>>
>>>>>>> The issue is when the label text width is more than the
>>>>>>> container(JPanel) width, the container tries to render with minimum
>>>>>>> width for all the components. In such case, the JMenuItem, which is
>>>>>>> added to the JMenuBar also returns its height dimension as 1 (the
>>>>>>> default minimum). The test case alternates between the short text
>>>>>>> and long text on the label, and it gives a flickering effect of 
>>>>>>> the Menu.
>>>>>>> The fix is to return preferred size from JMenuItem, if its 
>>>>>>> parent is
>>>>>>> a JMenuBar, since JMenuBar is added to the top level window.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Krishna
>>>>>>>
>>>>>>
>>>>>>
>>>>>> -- 
>>>>>> Best regards, Sergey.
>>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> Best regards, Sergey.
>>>>>
>>>>
>>>>
>>>> -- 
>>>> Best regards, Sergey.
>>>>
>>>
>>>
>>
>
>




More information about the swing-dev mailing list