From f506ef0d4f6c0c521ee32a94171dc5975d925cec Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sun, 6 Aug 2023 18:34:29 +0200 Subject: [PATCH] Theme Editor: improve order of directories in combobox --- .../themeeditor/FlatThemeFileEditor.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java index 434d4de8..4ab19a79 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java @@ -866,7 +866,14 @@ class FlatThemeFileEditor // restore directories history String[] directories = getPrefsStrings( state, KEY_DIRECTORIES ); - SortedComboBoxModel model = new SortedComboBoxModel<>( new File[0] ); + SortedComboBoxModel model = new SortedComboBoxModel<>( new File[0], + (file1, file2) -> { + // replace path separator with zero to order shorter names before longer + // (e.g. c:\dir\sub before c:\dir2\sub) + String path1 = file1.getPath().replace( '/', '\0' ).replace( '\\', '\0' ); + String path2 = file2.getPath().replace( '/', '\0' ).replace( '\\', '\0' ); + return path1.compareToIgnoreCase( path2 ); + } ); for( String dirStr : directories ) { File dir = new File( dirStr ); if( dir.isDirectory() ) @@ -1292,13 +1299,9 @@ class FlatThemeFileEditor private static class SortedComboBoxModel extends DefaultComboBoxModel { - private Comparator comparator; + private final Comparator comparator; - public SortedComboBoxModel( E[] items ) { - this( items, null ); - } - - public SortedComboBoxModel( E[] items, Comparator c ) { + SortedComboBoxModel( E[] items, Comparator c ) { super( sort( items, c ) ); this.comparator = c; }