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

Pavel Porvatov pavel.porvatov at oracle.com
Thu Aug 11 14:02:50 UTC 2011


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




More information about the swing-dev mailing list