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

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Fri Dec 14 12:40:22 UTC 2012


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