<Swing Dev> [9] Review request for 8152677 [macosx] All files filter can't be selected in JFileChooser

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Tue Apr 19 12:21:48 UTC 2016


   Hello,

   Could you review the updated fix:
     http://cr.openjdk.java.net/~alexsch/8152677/webrev.01

   - file chooser file filter is used as an initial value for the old 
file filter in the AquaFileChooserUI.FilterComboBoxModel
   - AcceptAllFileFilter class and filed are made static


  The current regression appears after fixing issue JDK-8031696 [macosx] 
TwentyThousandTest test failed with OOM.
  This was because for the each file filter setting (this includes file 
chooser creating and UI updating) new Aqua L&F file loading thread was 
started.
  The current fix makes the acceptAllFileFilter field static which 
allows to eliminate the tread starting when the file chooser UI is 
updated. However, it is still not enough and the TwentyThousandTest 
still fails. It requires additional investigation what else leads to the 
OOME.  I have created a separate issue on it: JDK-8154548 [macosx] 
Reconsider TwentyThousandTest test failed fix:
    https://bugs.openjdk.java.net/browse/JDK-8154548

   Thanks,
   Alexandr.


On 15/04/16 20:26, Sergey Bylokhov wrote:
> On 15.04.16 19:22, Alexander Scherbatiy wrote:
>> On 15/04/16 18:27, Sergey Bylokhov wrote:
>>   When a JFileChooser is created it always adds Accept All file filter
>> in the constructor because useAcceptAllFileFilter filed is true by 
>> default.
>>   Because of this the AquaFileChooserUI.FilterComboBoxModel initially
>> has the Accept All file filter as the first item.
>>
>>   After that it is possible to unset the Accept All file filter by
>> calling JFileChooser.setAcceptAllFileFilterUsed(false).
>
> But what will happen if the user will update the filter before the 
> Aqua will be set as default l&f(for example if Metal is set as default 
> via commandline)?
>
>>> On 15.04.16 16:46, Alexander Scherbatiy wrote:
>>>>
>>>> Hello,
>>>>
>>>> Could you review the fix:
>>>>    bug: https://bugs.openjdk.java.net/browse/JDK-8152677
>>>>    webrev: http://cr.openjdk.java.net/~alexsch/8152677/webrev.00
>>>>
>>>>    FilterComboBoxModel from AquaFileChooserUI overrides
>>>> getSelectedItem() method to always return the selected filter from the
>>>> file chooser.
>>>>
>>>>    JFileChooser.setFileFilter(FileFilter) first assign the passed 
>>>> filter
>>>> to fileFilter field and then fire "fileFilterChanged" property change
>>>> event. This leads that FilterComboBoxModel compares new file filter 
>>>> with
>>>> the selected one (which has the same value because it is obtained from
>>>> JFileChooser.fileFilter field) and do not updated JComboBox internal
>>>> structure so JComboBox.selectedItemReminder field still points to the
>>>> old one.
>>>>
>>>>    When a user selects “All Files” filter which is the first item 
>>>> from a
>>>> JFileChooser the JComboBox does not fire the action event because
>>>> selectedItemReminder points to the same first item.
>>>>
>>>>    The proposed solution is to remember the previous selected item in
>>>> the AquaFileChooserUI.FilterComboBoxModel.
>>>>
>>>>    Thanks,
>>>>    Alexandr.
>>>
>>>
>>
>
>




More information about the swing-dev mailing list