<Swing Dev> Approved: [Accessibility]Focus unable to traverse in the menubar

Sergey Malenkov Sergey.Malenkov at oracle.com
Tue Feb 5 10:20:45 UTC 2013


Hi Frank,

I approve.

Thanks,
SAM

On 23.01.2013 7:00, Frank Ding wrote:
> Hi Alexandr.
>    Thanks.
>
> To swing-dev, seems I still need anther member review before
> committing.  Is there anybody who would like to review it?
>
> Best regards,
> Frank
>
> On 1/22/2013 10:54 PM, Alexander Scherbatiy wrote:
>> On 1/22/2013 9:21 AM, Frank Ding wrote:
>>> Hi Alexandr,
>>>   Thanks for your information.  I have created a new webrev review @
>>> http://cr.openjdk.java.net/~dingxmin/8000326/webrev.03/
>>>   Pls take a look.
>>
>>        The fix looks good for me.
>>
>>>   By the way, please let me know once 2401619 is migrated to the bug
>>> system.
>>        I will let you know.
>>
>>        Thanks,
>>        Alexandr.
>>>
>>> Best regards,
>>> Frank
>>>
>>> On 1/21/2013 6:02 PM, Alexander Scherbatiy wrote:
>>>> On 1/18/2013 10:53 AM, Frank Ding wrote:
>>>>> Hi Alexandr,
>>>>>   Could you please let me know if there is any update on review
>>>>> result?  I did not receive any review information of 2401619 which
>>>>> means it's still not public/reviewed yet, right?
>>>>      I got answers from the javadoc team:
>>>>       8000326
>>>>        The JMenuBar javadoc could be updated to
>>>>       -------------------------
>>>>       By default, pressing the Tab key does not transfer focus from
>>>> a <code>JMenuBar</code> which is added to a container together with
>>>> other Swing components, because the
>>>> <code>focusTraversalKeysEnabled</code> property of
>>>> <code>JMenuBar</code> is set to <code>false</code>. To resolve this,
>>>> you should call the
>>>> <code>JMenuBar.setFocusTraversalKeysEnabled(true)</code> method.
>>>>       -------------------------
>>>>
>>>>      2401619
>>>>         Yes, there should be "will return" expression instead of the
>>>> "with return"?
>>>>          The 2401619 java incident has not been migrated yet to the
>>>> bug system.
>>>>
>>>>     Thanks,
>>>>     Alexandr.
>>>>
>>>>
>>>>>
>>>>> Best regards,
>>>>> Frank
>>>>>
>>>>> On 12/18/2012 2:36 PM, Frank Ding wrote:
>>>>>> Thanks, Alexandr.
>>>>>>
>>>>>> On 12/14/2012 8:40 PM, Alexander Scherbatiy wrote:
>>>>>>> On 12/13/2012 1:01 PM, Frank Ding wrote:
>>>>>>>> Hi Alexandr,
>>>>>>>>   I made another change according to your comment @
>>>>>>>> http://cr.openjdk.java.net/~dingxmin/8000326/webrev.02 . Please
>>>>>>>> review it.
>>>>>>>>   I submitted a bug whose internal review ID is 2401619 about
>>>>>>>> one wording mistake in ContainerOrderFocusTraversalPolicy. But
>>>>>>>> since the bug system transition, newly submitted bugs cannot
>>>>>>>> pass review and get publicly available.  Can you help me to have
>>>>>>>> somebody review it?
>>>>>>>
>>>>>>>      I resent the both issues 8000326 and 2401619 to the JDK doc
>>>>>>> team to review.
>>>>>>>
>>>>>>>      Thanks,
>>>>>>>      Alexandr.
>>>>>>>
>>>>>>>>
>>>>>>>>   Thanks and Best regards,
>>>>>>>>   Frank
>>>>>>>>
>>>>>>>> On 12/12/2012 10:07 PM, Alexander Scherbatiy wrote:
>>>>>>>>> On 12/10/2012 11:08 AM, Frank Ding wrote:
>>>>>>>>>> Hi Pavel,
>>>>>>>>>>   I think pointing out the special behavior in javadoc makes
>>>>>>>>>> more sense.  Could you please take a look at my draft below?
>>>>>>>>>> http://cr.openjdk.java.net/~dingxmin/8000326/webrev.01
>>>>>>>>>      I think that It has more sense to point this special
>>>>>>>>> behavior in the JMenuBar class itself.
>>>>>>>>>      It looks more naturally to read about the JMenuBar focus
>>>>>>>>> traversal behaviour from the JMenuBar javadoc.
>>>>>>>>>
>>>>>>>>>>   Note that I think in the sentence "By default, methods of
>>>>>>>>>> this class with return a Component only if it is" it should be
>>>>>>>>>> "will" not "with", shouldn't it?
>>>>>>>>>      Thank you that you point it out. Could you create an issue
>>>>>>>>> on it?
>>>>>>>>>
>>>>>>>>>     Thanks,
>>>>>>>>>     Alexandr.
>>>>>>>>>>
>>>>>>>>>>   Expecting your reply.
>>>>>>>>>> Best regards,
>>>>>>>>>> Frank
>>>>>>>>>>
>>>>>>>>>> On 10/8/2012 7:47 PM, pavel porvatov wrote:
>>>>>>>>>>> Hi Jonathan,
>>>>>>>>>>>> Hi Pavel,
>>>>>>>>>>>>
>>>>>>>>>>>> On 10/02/2012 11:31 PM, Pavel Porvatov wrote:
>>>>>>>>>>>>> Hi Jonathan,
>>>>>>>>>>>>>> Hi Pavel,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I've filed bug 7198816 for this problem,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Regards, Pavel
>>>>>>>>>>>>>> http://bugs.sun.com/view_bug.do?bug_id=7198816
>>>>>>>>>>>>> This bug was not ported to jira, so I created another bug:
>>>>>>>>>>>>> https://jbs.oracle.com/bugs/browse/JDK-8000326
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks for porting, but I have trouble with opening that link.
>>>>>>>>>>> Sorry, use the following link:
>>>>>>>>>>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8000326
>>>>>>>>>>>
>>>>>>>>>>> but the bug is not available yet... It contains the same
>>>>>>>>>>> description as the original bug.
>>>>>>>>>>>
>>>>>>>>>>>> Any comments on the patch?
>>>>>>>>>>> The fix looks dangerous for me. After the fix the
>>>>>>>>>>> setFocusTraversalKeysEnabled method doesn't work for JMenuBar
>>>>>>>>>>> (when ContainerOrderFocusTraversalPolicy is used) - it
>>>>>>>>>>> ignores this property...
>>>>>>>>>>>
>>>>>>>>>>> Regards, Pavel
>>>>>>>>>>>>
>>>>>>>>>>>> best regards
>>>>>>>>>>>> Jonathan
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Regards, Pavel
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 11/09/2011 07:25 PM, Pavel Porvatov wrote:
>>>>>>>>>>>>>>> Hi Jing,
>>>>>>>>>>>>>>>> Thanks Pavel,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>      It seems fine to me, if no other
>>>>>>>>>>>>>>>> suggestions/opinions, I guess we can move on with this?
>>>>>>>>>>>>>>> Yes, we can. Could you please file a bug for the problem
>>>>>>>>>>>>>>> as well?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks, Pavel
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On 2011/11/2 19:58, Pavel Porvatov wrote:
>>>>>>>>>>>>>>>>> Hi Jing,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hello Anton,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>     Thanks for the review. I am still trying to figure
>>>>>>>>>>>>>>>>>> out some real case and provide more detail the
>>>>>>>>>>>>>>>>>> customer may fail.
>>>>>>>>>>>>>>>>>>     Anyway, I agree we'd better update the java spec
>>>>>>>>>>>>>>>>>> to make it clear for the customers. I'd like to know
>>>>>>>>>>>>>>>>>> if anyone can help with that?
>>>>>>>>>>>>>>>>> I'm not sure that javadoc changing is a good decision
>>>>>>>>>>>>>>>>> in this case. ContainerOrderFocusTraversalPolicy is
>>>>>>>>>>>>>>>>> designed for AWT, but I don't know why that policy
>>>>>>>>>>>>>>>>> cannot be used for Swing components as well. I see
>>>>>>>>>>>>>>>>> several problems:
>>>>>>>>>>>>>>>>> 1. We cannot change javadoc of
>>>>>>>>>>>>>>>>> ContainerOrderFocusTraversalPolicy because of backward
>>>>>>>>>>>>>>>>> compatibility
>>>>>>>>>>>>>>>>> 2. We cannot remove setFocusTraversalKeysEnabled(false)
>>>>>>>>>>>>>>>>> from the JMenuBar#JMenuBar() constructor because of
>>>>>>>>>>>>>>>>> backward compatibility
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> May be the best decision is to specify, that JMenuBar
>>>>>>>>>>>>>>>>> creates menu with the focusTraversalKeysEnabled = false
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Did you mean that for the new menu
>>>>>>>>>>>>>> setFocusTraversalKeysEnabled(false) ? I've tried, but it
>>>>>>>>>>>>>> does not seem to work for this problem.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>  if my understanding is incorrect, please help to fix me.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Regards, Pavel
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On 2011/10/12 20:54, Anton Tarasov wrote:
>>>>>>>>>>>>>>>>>>> Hi Neil,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On 10/10/2011 7:01 PM, Neil Richards wrote:
>>>>>>>>>>>>>>>>>>>> On Mon, 2011-10-10 at 16:56 +0400, Anton Tarasov wrote:
>>>>>>>>>>>>>>>>>>>>> Hi Neil and Jing,
>>>>>>>>>>>>>>>>>>>>> I'm afraid that it's wrong to use
>>>>>>>>>>>>>>>>>>>>> ContainerOrderFocusTraversalPolicy
>>>>>>>>>>>>>>>>>>>>> for swing components. This policy is designed for AWT.
>>>>>>>>>>>>>>>>>>>>> JMenuBar calls setFocusTraversalKeysEnabled(false)
>>>>>>>>>>>>>>>>>>>>> in its ctor which
>>>>>>>>>>>>>>>>>>>>> means that it "swallows" focus traversal keys (like
>>>>>>>>>>>>>>>>>>>>> TAB/SHIFT-TAB
>>>>>>>>>>>>>>>>>>>>> etc.)
>>>>>>>>>>>>>>>>>>>>> and so it can't be a member of a focus traversal
>>>>>>>>>>>>>>>>>>>>> chain. Swing's
>>>>>>>>>>>>>>>>>>>>> default traversal policy
>>>>>>>>>>>>>>>>>>>>> (LayoutFocusTraversalPolicy) excludes
>>>>>>>>>>>>>>>>>>>>> JMenuBar
>>>>>>>>>>>>>>>>>>>>> from a focus traversal cycle.
>>>>>>>>>>>>>>>>>>>>> ContainerOrderFocusTraversalPolicy is
>>>>>>>>>>>>>>>>>>>>> not "aware" about JMenuBar and so it allows it.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> So, either a default Swing policy should be used,
>>>>>>>>>>>>>>>>>>>>> or a custom policy.
>>>>>>>>>>>>>>>>>>>>> At worst, ContainerOrderFocusTraversalPolicy should
>>>>>>>>>>>>>>>>>>>>> be overriden
>>>>>>>>>>>>>>>>>>>>> to exclude JMenuBar from a cycle (override its
>>>>>>>>>>>>>>>>>>>>> accept(Component)
>>>>>>>>>>>>>>>>>>>>> method).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I agree that backward compatibility should not be broken
>>>>>>>>>>>>>> by the fix, so here's a patch from me for the worst case,
>>>>>>>>>>>>>> could you please help to take a look?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> http://cr.openjdk.java.net/~luchsh/7198816/
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>> Jonathan
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>> Anton.
>>>>>>>>>>>>>>>>>>>> Hi Anton,
>>>>>>>>>>>>>>>>>>>> Thanks for reviewing the suggestion, and for your
>>>>>>>>>>>>>>>>>>>> insights into this
>>>>>>>>>>>>>>>>>>>> scenario.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> > From the Javadoc, it seems that
>>>>>>>>>>>>>>>>>>>> setFocusTraversalKeysEnabled() is mainly
>>>>>>>>>>>>>>>>>>>> concerned with choosing whether focus traversal key
>>>>>>>>>>>>>>>>>>>> presses (normally
>>>>>>>>>>>>>>>>>>>> TAB and SHIFT-TAB) are processed "automatically"
>>>>>>>>>>>>>>>>>>>> (when 'true') or are
>>>>>>>>>>>>>>>>>>>> delivered to the Component as key events (for the
>>>>>>>>>>>>>>>>>>>> component's code to
>>>>>>>>>>>>>>>>>>>> process "manually").
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> (In the case of JMenuBar, it makes them come through
>>>>>>>>>>>>>>>>>>>> as key events, but
>>>>>>>>>>>>>>>>>>>> doesn't do anything special to process these events,
>>>>>>>>>>>>>>>>>>>> which is why they
>>>>>>>>>>>>>>>>>>>> get discarded.)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> That is right, though it doesn't directly relate to
>>>>>>>>>>>>>>>>>>> the issue we're talking about =)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Your description above, though, seems to suggest
>>>>>>>>>>>>>>>>>>>> that it is generally
>>>>>>>>>>>>>>>>>>>> undesirable for the JMenuBar to be given the focus,
>>>>>>>>>>>>>>>>>>>> as all the
>>>>>>>>>>>>>>>>>>>> Swing-aware focus traversal policies make a point of
>>>>>>>>>>>>>>>>>>>> not giving focus to
>>>>>>>>>>>>>>>>>>>> JMenuBar items.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> If this is so, then wouldn't it make sense to call
>>>>>>>>>>>>>>>>>>>> setFocusable(false)
>>>>>>>>>>>>>>>>>>>> from its constructor (too), to ensure it doesn't get
>>>>>>>>>>>>>>>>>>>> focus ?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Or, to put it another way, could you explain a
>>>>>>>>>>>>>>>>>>>> little of the reasoning
>>>>>>>>>>>>>>>>>>>> or scenario behind why it is desirable for JMenuBar
>>>>>>>>>>>>>>>>>>>> items to be
>>>>>>>>>>>>>>>>>>>> generally focusable, even though they aren't
>>>>>>>>>>>>>>>>>>>> focus-traversable ?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> I think such an explanation would be really helpful
>>>>>>>>>>>>>>>>>>>> in clearing up my
>>>>>>>>>>>>>>>>>>>> confusion on this point.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks, Neil
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Well, I suspect that the core of the problem is that
>>>>>>>>>>>>>>>>>>> adding JMenuBar as JComponent to a swing
>>>>>>>>>>>>>>>>>>> container doesn't make much sense. Though it is not
>>>>>>>>>>>>>>>>>>> directly prohibited, doing so may cause
>>>>>>>>>>>>>>>>>>> side effects like the one you've discovered. When
>>>>>>>>>>>>>>>>>>> JMenuBar is set properly onto a JFrame its focus
>>>>>>>>>>>>>>>>>>> is managed by JRootPane and its focusability just
>>>>>>>>>>>>>>>>>>> isn't taken into account. That's may be the reason
>>>>>>>>>>>>>>>>>>> it's not declared unfocusable. Honestly, I can't tell
>>>>>>>>>>>>>>>>>>> you exactly.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> If you do it, you probably won't make any harm, but I
>>>>>>>>>>>>>>>>>>> personally don't think this is a vital fix
>>>>>>>>>>>>>>>>>>> (unless you have a good use case of the scenario
>>>>>>>>>>>>>>>>>>> you've provided). Anyway, this is a swing question
>>>>>>>>>>>>>>>>>>> (I'm, as an AWT dev member, leaving the decision to
>>>>>>>>>>>>>>>>>>> swing guys).
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>> Anton.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>



More information about the swing-dev mailing list