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

Frank Ding dingxmin at linux.vnet.ibm.com
Tue Dec 18 06:36:02 UTC 2012


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