Java Swing - пример JFileChooser
JFileChooser
- это быстрый и простой способ предложить пользователю выбрать файл или место для его сохранения. Ниже приведены несколько простых примеров использования этого класса.
JFileChooser
имеет 6 конструкторов:
-
JFileChooser()
- пустой конструктор, указывающий на каталог пользователя по умолчанию -
JFileChooser(String)
- использует заданный путь -
JFileChooser(File)
- использует данный файл как путь -
JFileChooser(FileSystemView)
- использует данный FileSystemView -
JFileChooser(String, FileSystemView)
- использует заданный путь иFileSystemView
-
JFileChooser(File, FileSystemView)
- использует данный текущий каталог иFileSystemView
Все разные способы вызова конструктораJFileChooser
//JFileChooser jfc; //String path = "C:\\Users\\Public"; //File file = new File("C:\\Users\\Public"); //FileSystemView fsv = FileSystemView.getFileSystemView(); //jfc = new JFileChooser(); //jfc = new JFileChooser(path); //jfc = new JFileChooser(file); //jfc = new JFileChooser(fsv); //jfc = new JFileChooser(path, fsv); //jfc = new JFileChooser(file, fsv);
Личное предпочтение автора - учитыватьFileSystemView
. В приведенных ниже примерах мы используемFileSystemView.getFileSystemView()
и указываем его на домашний каталог черезgetHomeDirectory()
. Этот процесс приводит к типу файла. Другими словами, мы используем конструкторJFileChooser(File)
с учетомFileSystemView
.
1. показать * Dialog () -Open or save a file
Пример того, как использоватьJFileChooser
для получения абсолютного пути к файлу, который пользователь хочет открыть, или для получения места, в котором пользователь хочет сохранить файл:
FileChooser1.java
package com.example.jfileChooser; import java.io.File; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser1 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); int returnValue = jfc.showOpenDialog(null); // int returnValue = jfc.showSaveDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File selectedFile = jfc.getSelectedFile(); System.out.println(selectedFile.getAbsolutePath()); } } }
Обратите внимание, что два методаshowOpenDialog()
иshowSaveDialog()
похожи, разница заключается в том, как разработчик обрабатывает каждый из них. Для удобства чтения я бы не советовал смешивать два метода.
Выход:
Когда пользователь переходит в каталог, выбирает файл и нажимает «Открыть».
Выход:
C:\Users\Public\Pictures\pollock.she-wolf.jpg
2. setFileSelectionMode (число) -Select files or directories
С помощью этого метода мы можем ограничить пользователя выбором только каталогов (JFileChooser.DIRECTORIES_ONLY
) или только файлов (JFileChooser.FILES_ONLY
) или файлов и каталогов (JFileChooser.FILES_AND_DIRECTORIES
). По умолчаниюFILES_ONLY
. Вот пример, реализующийJFileChooser.DIRECTORIES_ONLY
:
FileChooser2.java
package com.example.jfileChooser; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser2 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); jfc.setDialogTitle("Choose a directory to save your file: "); jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnValue = jfc.showSaveDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { if (jfc.getSelectedFile().isDirectory()) { System.out.println("You selected the directory: " + jfc.getSelectedFile()); } } } }
Выход:
You selected the directory: C:\Users\Public\Pictures
3. setMultiSelectionEnabled (логический) -Allow multiple selections
Пример, в котором включен множественный выбор. Пользователь выбирает несколько файлов, а программа печатает имена:
FileChooser3.java
package com.example.jfileChooser; import java.io.File; import java.util.Arrays; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser3 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); jfc.setDialogTitle("Multiple file and directory selection:"); jfc.setMultiSelectionEnabled(true); jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); int returnValue = jfc.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File[] files = jfc.getSelectedFiles(); System.out.println("Directories found\n"); Arrays.asList(files).forEach(x -> { if (x.isDirectory()) { System.out.println(x.getName()); } }); System.out.println("\n- - - - - - - - - - -\n"); System.out.println("Files Found\n"); Arrays.asList(files).forEach(x -> { if (x.isFile()) { System.out.println(x.getName()); } }); } } }
Выход:
Directories found Camera Roll Saved Pictures - - - - - - - - - - - Files Found autumn_rhythm-pollock1.jpg kuNUfO.jpg mona.jpg
4. Фильтры -Limit the set of files shown to the user
Всегда удобно ограничить выбор пользователя потребностями программы. Например, если вашей программе требуются изображения в формате png и gif, рекомендуется ограничить выбор пользователя только этим. В приведенном ниже примере показано, как этого добиться с помощью настраиваемогоFileNameExtensionFilter
:
FileChooser4.java
package com.example.jfileChooser; import javax.swing.JFileChooser; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.filechooser.FileSystemView; public class FileChooser4 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); jfc.setDialogTitle("Select an image"); jfc.setAcceptAllFileFilterUsed(false); FileNameExtensionFilter filter = new FileNameExtensionFilter("PNG and GIF images", "png", "gif"); jfc.addChoosableFileFilter(filter); int returnValue = jfc.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { System.out.println(jfc.getSelectedFile().getPath()); } } }
Выход:
Как видите, пользователю запрещено выбирать что-либо еще. Указанный выше каталог также содержит другие типы изображений, но пользователю показываются только gif и png.
Каталог выглядит так:
5. Использование showDialog ()
Если вам нужно настроить кнопку одобрения, используйте методshowDialog()
. Вот пример того, как его использовать:
FileChooser5.java
package com.example.inputDialog; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser5 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); jfc.setDialogTitle("Custom button"); int returnValue = jfc.showDialog(null, "A button!"); if (returnValue == JFileChooser.APPROVE_OPTION) { System.out.println(jfc.getSelectedFile().getPath()); } } }
Выход:
Note
ВJFileChooser
есть метод под названиемsetApproveButtonText(String)
. Проблема с этим методом в том, что он работает только дляshowOpenDialog()
. Рекомендуется использоватьshowDialog()
как заменуshowSaveDialog()
, когда требуется настраиваемая кнопка.
Вы также должны проверить самые простые и наиболее часто используемые методы для записи и чтения файлов: