# <Swing Dev> When running with the Nimbus look and feel, the JFileChooser does not display mnemonics for its controls.

Charles Lee littlee at linux.vnet.ibm.com
Thu Aug 11 23:33:13 PDT 2011

```On 08/11/2011 10:02 PM, Pavel Porvatov wrote:
> Hi Charles,
>> On 08/08/2011 10:17 PM, Pavel Porvatov wrote:
>>> Hi Charles,
>>>> On 08/05/2011 05:00 PM, Pavel Porvatov wrote:
>>>>> Hi Charles,
>>>>>> On 08/03/2011 08:49 PM, Pavel Porvatov wrote:
>>>>>>> Hi Charles,
>>>>>>>>
>>>>>>> Yes, that's what I meant...
>>>>>>>
>>>>>>>> 2. I do not think we should use VK_XXXX code. CR7024118
>>>>>>>> recommends to remove the VK_XXX code right?
>>>>>>> I don't see such recommendations. Anyway we cannot use chars now
>>>>>>> because of backward compatibility requirement.
>>>>>> CR7024118 says:
>>>>>>
>>>>>> "As seen in following, 3 mnemonic keys seems to be hardcoded and
>>>>>> making them unable to localize. Please consider externalizing
>>>>>> them to
>>>>>> src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal.properties"
>>>>>> and
>>>>>> "Since following keys in
>>>>>> src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_xx.properties
>>>>>> being translated, in some languages mnemonic character is not in
>>>>>> label string and won't show up in gui. "
>>>>>>
>>>>>> It means the hardcoded VK_XXX codes can not be localized and in
>>>>>> some situation the mnemonic character is not shown in the label.
>>>>>> So we should use localized character as mnemonic. right?
>>>>> The last your sentence is incorrect. Hardcoded mnemonics cannot be
>>>>> localized via properties files and therefore they works only for
>>>>> for English, but not for other supported languages. So we should
>>>>> use localized VK_XXX as mnemonics... Because, as I said before, we
>>>>> MUST keep backward compatibility.
>>>>>
>>>>> Regards, Pavel
>>>>>
>>>>>>
>>>>>>>> 3. If the patch is ok, I would like to fix CR7024118 also.
>>>>>>>>
>>>>>>> So, there are two comments about the patch:
>>>>>>> 1. We must use VK_XXX codes for backward compatibility in
>>>>>>> WindowsLAF and MetalLAFs . Therefore NimbusLAF should use VK_XXX
>>>>>>> codes as well to be consistent with other LAFs
>>>>>>>
>>>>>>> 2. Could you please put mnemonics near labels? E.g.
>>>>>>> FileChooser.lookInLabelText=Look In:
>>>>>>> FileChooser.lookInLabelMnemonic=<VK_CODE>
>>>>>>>
>>>>>>> It looks much more convenient I believe
>>>>>>>
>>>>>>> Regards, Pavel
>>>>>>
>>>>>>
>>>>>
>>>> Hi Pavel,
>>>>
>>>> I do not quite understand why we should keep VK_CODE, so I make two
>>>> patches for first review, I will modify other properties if one of
>>>> the patches is ok :-)
>>> No problem. I wrote the example (see attach) that shows the problem.
>>> The test works fine without patches, with the patch.review1 an
>>> exception is thrown, with the patch.review2 mnemonic is missed. When
>>> I told about regressions I meant that we MUST keep
>>> FileChooser.lookInLabelMnemonic as an Integer. Therefore we have
>>> only one possible way: to use integer values (VK_XXX codes), but not
>>> VK_XXX names or characters.
>>>
>>>> [1] is the patch which is not use VK_CODE. (attached)
>>>> [2] is the patch which is use VK_CODE, I have to use reflect in
>>>> that patch. Maybe I miss something. (attached)
>>>>
>>> Regards, Pavel
>> Here is another one :-) it uses VK_code hard coded as mental does.
>> If it is ok, I will like to take CR7024118. Is reflection ok to you,
>> Pavel?
>>
> Your current fix has a localization problem: it doesn't not work for
> other languages (the same problem described in
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7024118). I see the
> fix in the following way:
>
> 1. Change getting mnemonics in SynthFileChooserUIImpl like in
> WindowsFileChooserUI:
> lookInLabelMnemonic =
> UIManager.getInt("FileChooser.lookInLabelMnemonic");
>
> 2. Add in synth.properties, synth_de.properties and other synth
> properties files:
> FileChooser.lookInLabelMnemonic=49
> FileChooser.folderNameLabelMnemonic=...
> FileChooser.filesOfTypeLabelMnemonic=...
> FileChooser.filesOfTypeMnemonic=...
>
> where "..." is an appropriate integer numbers. BTW: we are using
> integer mnemonics in other properties files, e.g. in
> src\share\classes\com\sun\swing\internal\plaf\basic\resources\basic.properties
>
>
> I agree that mnemonics in integer numbers is not very readable, but
> this way is most compatible and localizable way, I think.
>
> Regards, Pavel
>
Wow. I am fully agree with you. Let me explain a little bit about this
patch:
1. This patch is just want to keep the same things as Metal things.
2. After this patch, I would like to take CR7024118, and fix the
localization problem in CR7024118 plus in Nimbus Laf. It will be more