|
33 | 33 | import javax.swing.*;
|
34 | 34 | import java.awt.*;
|
35 | 35 | import java.io.File;
|
| 36 | +import java.io.FileFilter; |
36 | 37 | import java.io.FilenameFilter;
|
37 | 38 | import java.lang.reflect.Method;
|
38 | 39 |
|
@@ -73,9 +74,14 @@ private static File chooseFile(String title, File initialDirectory, File initial
|
73 | 74 | }
|
74 | 75 |
|
75 | 76 | public static File chooseDirectory(String title, File initialDirectory) {
|
76 |
| - return chooseNative(title, initialDirectory, null, null, JFileChooser.DIRECTORIES_ONLY, LOAD); |
| 77 | + if (Globals.IS_MAC) { |
| 78 | + return chooseNative(title, initialDirectory, null, null, JFileChooser.DIRECTORIES_ONLY, LOAD); |
| 79 | + } else { |
| 80 | + return chooseSwing(title, initialDirectory, null, null, JFileChooser.DIRECTORIES_ONLY, LOAD); |
| 81 | + } |
77 | 82 | }
|
78 | 83 |
|
| 84 | + |
79 | 85 | public static File[] chooseMultiple(String title, File initialDirectory, final FilenameFilter filter) {
|
80 | 86 |
|
81 | 87 | File[] files = null;
|
@@ -130,6 +136,68 @@ private static File chooseNative(String title, File initialDirectory, File initi
|
130 | 136 | }
|
131 | 137 | }
|
132 | 138 |
|
| 139 | + |
| 140 | + private static File chooseSwing(String title, File initialDirectory, File initialFile, final FilenameFilter filter, |
| 141 | + int directoryMode, int mode) { |
| 142 | + |
| 143 | + UIManager.put("FileChooser.readOnly", Boolean.FALSE); |
| 144 | + JFileChooser fileChooser = getJFileChooser(title, initialDirectory, initialFile, filter, directoryMode); |
| 145 | + Frame parentFrame = getParentFrame(); |
| 146 | + boolean approve; |
| 147 | + if (mode == LOAD) { |
| 148 | + approve = fileChooser.showOpenDialog(parentFrame) == JFileChooser.APPROVE_OPTION; |
| 149 | + } else { |
| 150 | + |
| 151 | + approve = fileChooser.showSaveDialog(parentFrame) == JFileChooser.APPROVE_OPTION; |
| 152 | + } |
| 153 | + |
| 154 | + if (approve) { |
| 155 | + return fileChooser.getSelectedFile(); |
| 156 | + } else { |
| 157 | + return null; |
| 158 | + } |
| 159 | + |
| 160 | + } |
| 161 | + |
| 162 | + /** |
| 163 | + * @param title |
| 164 | + * @param initialDirectory |
| 165 | + * @param initialFile |
| 166 | + * @param filter |
| 167 | + * @param directoryMode either JFileChooser.DIRECTORIES_ONLY, JFileChooser.FILES_ONLY, or |
| 168 | + * JFileChooser.DIRECTORIES_ONLY : JFileChooser.FILES_AND_DIRECTORIES |
| 169 | + * @return |
| 170 | + */ |
| 171 | + private static JFileChooser getJFileChooser(String title, File initialDirectory, File initialFile, |
| 172 | + final FilenameFilter filter, int directoryMode) { |
| 173 | + JFileChooser fileChooser = new JFileChooser(); |
| 174 | + if (initialDirectory != null) { |
| 175 | + fileChooser.setCurrentDirectory(initialDirectory); |
| 176 | + } |
| 177 | + if (initialFile != null) { |
| 178 | + fileChooser.setSelectedFile(initialFile); |
| 179 | + } |
| 180 | + if (filter != null) { |
| 181 | + fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() { |
| 182 | + @Override |
| 183 | + public boolean accept(File file) { |
| 184 | + return filter.accept(file.getParentFile(), file.getName()); |
| 185 | + } |
| 186 | + |
| 187 | + @Override |
| 188 | + public String getDescription() { |
| 189 | + return ""; |
| 190 | + } |
| 191 | + }); |
| 192 | + } |
| 193 | + |
| 194 | + fileChooser.setDialogTitle(title); |
| 195 | + fileChooser.setFileSelectionMode(directoryMode); |
| 196 | + |
| 197 | + return fileChooser; |
| 198 | + } |
| 199 | + |
| 200 | + |
133 | 201 | /**
|
134 | 202 | * Reflectively call FileDialog.setMultipleMode.
|
135 | 203 | * Does nothing if method not available
|
|
0 commit comments