file chooser implemented with default directory location in windows.

This commit is contained in:
Josh Ashton
2024-03-21 13:25:02 -06:00
parent 93c838ea68
commit a053c98a7b
5 changed files with 151 additions and 12 deletions
+61 -11
View File
@@ -3,10 +3,11 @@ import java.io.File;
import java.io.FileNotFoundException;
import javax.swing.JPanel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JButton;
import gui.ComboBox;
import gui.FileChooser;
/**
* The Nav class represents the Navigation bar at the top of the JFrame window.
*
@@ -85,26 +86,52 @@ public class Nav extends JPanel {
* debugging purposes.
*/
private void createGUI() {
JComboBox<String> fileOptions = new JComboBox<String>();
fileOptions.addItem("New");
fileOptions.addItem("Open");
fileOptions.addItem("Save");
fileOptions.addItem("Exit");
JLabel elapsedTime = new JLabel("Elapsed Time: 00:00:00");
JButton solve = new JButton("Solve");
add(fileOptions);
add(createFileOptions());
add(elapsedTime);
add(solve);
}
/**
* Create the ComboBox for the file options.
*
* @return ComboBox<String>
*/
private ComboBox<String> createFileOptions() {
ComboBox<String> fileOptions = new ComboBox<>();
fileOptions.addItem("New");
fileOptions.addItem("Open");
fileOptions.addItem("Save");
fileOptions.addItem("Exit");
fileOptions.addActionListener(e -> {
String selected = (String) fileOptions.getSelectedItem();
switch(selected) {
case "New":
newFile();
break;
case "Open":
openFile();
break;
case "Save":
saveFile();
break;
case "Exit":
System.exit(0);
break;
default:
System.out.println("Invalid selection.");
}
});
return fileOptions;
}
/**
* Given the user's selection from the JComboBox, perform the appropriate
* action.
*
* @param String
*/
private void newFile() {
int defaultOption = s.getNewFileProperties();
@@ -120,8 +147,30 @@ public class Nav extends JPanel {
// TODO: Create a new .sdku file in the default directory.
}
/**
* Open an existing .sdku file in the user's file system, using a GUI.
*/
private void openFile() {
File defaultDirectory = new File(s.getDefaultDirectory());
if(defaultDirectory != null || !defaultDirectory.isDirectory()) {
defaultDirectory.mkdirs();
}
FileChooser fc = new FileChooser(defaultDirectory);
int result = fc.showOpenDialog(this);
if(result == FileChooser.APPROVE_OPTION) {
f = fc.getSelectedFile();
createGrid(f);
} else {
System.out.println("No file was selected.");
}
}
/**
* Given an input filename, open the file and populate the grid.
*
* This implementation is for use only in the command-line interface.
*
* @param String
*/
@@ -140,6 +189,7 @@ public class Nav extends JPanel {
return;
}
System.out.println("Opening the file " + filename + ".sdku.");
createGrid(f);
}
+2 -1
View File
@@ -1,3 +1,4 @@
import java.util.Scanner;
import java.io.File;
@@ -20,7 +21,7 @@ public class Settings {
// settings, effectively toggles. If the file does not exist,
// populate it with the following values (possibly in .json).
newFileProperties = 0;
defaultDirectory = "~/AppData/Local/sudoku/";
defaultDirectory = "C:\\Users\\jashton\\AppData\\Local\\Sudoku"; // TODO: This is a Windows default. Need OS detection.
}
/**
+25
View File
@@ -0,0 +1,25 @@
package gui;
import javax.swing.JComboBox;
/**
* A custom JComboBox with the appropriate styling for the Sudoku app.
*/
public class ComboBox<E> extends JComboBox<E> {
/**
* Create a new ComboBox with the default styling and without initial items.
*/
public ComboBox() {
super();
style();
}
/**
* Set up the ComboBox with the appropriate styling.
*/
private void style() {
// TODO: Style the ComboBox.
System.out.println("TODO: Style the ComboBox.");
}
}
+62
View File
@@ -0,0 +1,62 @@
package gui;
import java.io.File;
import javax.swing.filechooser.FileFilter;
import javax.swing.JFileChooser;
/**
* A custom FileChooser with the appropriate styling for the Sudoku app.
* Additionally, this FileChooser only allows .sdku files to be selected.
*/
public class FileChooser extends JFileChooser {
/**
* Create a new FileChooser with the default directory set to the user's
* Sudoku directory.
*
* @param defaultDirectory
*/
public FileChooser(File defaultDirectory) {
super(defaultDirectory);
for (File f: defaultDirectory.listFiles()) {
ensureFileIsVisible(f);
}
style();
setupSettings();
}
/**
* Set up the FileChooser with the appropriate styling.
*/
private void style() {
// TODO: Style the FileChooser.
System.out.println("TODO: Style the FileChooser.");
}
/**
* Set up the FileChooser with the appropriate settings.
*/
private void setupSettings() {
setFileHidingEnabled(false);
setFileSelectionMode(JFileChooser.FILES_ONLY);
rescanCurrentDirectory();
setFileFilter(new Filter());
}
/**
* A custom FileFilter to only allow .sdku files to be selected.
*/
private class Filter extends FileFilter {
public boolean accept(File f) {
String name = f.getName().toLowerCase();
if(name.length() > 5) {
return name.substring(name.length() - 5).equals(".sdku") || !f.isDirectory();
}
return false;
}
public String getDescription() {
return "Sudoku Puzzle Files (*.sdku)";
}
}
}
+1
View File
@@ -5,6 +5,7 @@ function Run {
javac *.java
java App $flag
rm *.class
rm gui/*.class
}
if ($args.Length -eq 1) {