diff --git a/src/dev/kske/chess/ui/DialogUtil.java b/src/dev/kske/chess/ui/DialogUtil.java index 0621666..b8dc9b1 100644 --- a/src/dev/kske/chess/ui/DialogUtil.java +++ b/src/dev/kske/chess/ui/DialogUtil.java @@ -9,6 +9,7 @@ import java.util.Collection; import java.util.List; import java.util.function.BiConsumer; import java.util.function.Consumer; +import java.util.prefs.Preferences; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; @@ -32,22 +33,34 @@ public class DialogUtil { private DialogUtil() {} + /** + * Saves the last accessed folder for loading and saving game files. + */ + private static Preferences preferences = Preferences.userNodeForPackage(DialogUtil.class); + public static void showFileSelectionDialog(Component parent, Consumer> action, Collection filters) { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setCurrentDirectory(new File(System.getProperty("user.home"))); - fileChooser.setAcceptAllFileFilterUsed(false); - filters.forEach(fileChooser::addChoosableFileFilter); - if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) action.accept(Arrays.asList(fileChooser.getSelectedFile())); + JFileChooser fileChooser = createFileChooser(filters); + if (fileChooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION) { + action.accept(Arrays.asList(fileChooser.getSelectedFile())); + preferences.put("path", fileChooser.getSelectedFile().getParent()); + } } public static void showFileSaveDialog(Component parent, Consumer action, Collection filters) { + JFileChooser fileChooser = createFileChooser(filters); + if (fileChooser.showSaveDialog(parent) == JFileChooser.APPROVE_OPTION) { + action.accept(new File(fileChooser.getSelectedFile().getAbsolutePath() + "." + + ((FileNameExtensionFilter) fileChooser.getFileFilter()).getExtensions()[0])); + preferences.put("path", fileChooser.getSelectedFile().getParent()); + } + } + + private static JFileChooser createFileChooser(Collection filters) { JFileChooser fileChooser = new JFileChooser(); - fileChooser.setCurrentDirectory(new File(System.getProperty("user.home"))); + fileChooser.setCurrentDirectory(new File(preferences.get("path", System.getProperty("user.home")))); fileChooser.setAcceptAllFileFilterUsed(false); filters.forEach(fileChooser::addChoosableFileFilter); - if (fileChooser.showSaveDialog(parent) == JFileChooser.APPROVE_OPTION) action.accept( - new File(fileChooser.getSelectedFile().getAbsolutePath() + "." - + ((FileNameExtensionFilter) fileChooser.getFileFilter()).getExtensions()[0])); + return fileChooser; } public static void showGameConfigurationDialog(Component parent, BiConsumer action) {