Руководство JavaFX FileChooser и DirectoryChooser
1. JavaFX FileChooser, DirectoryChooser
FileChooser позволяет пользвателю перемещать систему файлов чтоы выбрать один или более файлов. Индентичный компонент это DirectoryChooser позволяет пользователю выбирать папку.
Внизу является изображение FileChooser/DirectoryChooser когда он запущен на разных операционных системах.
Mac OS
Windows
Linux
2. Пример с FileChooser
Пример ниже, когда пользователь нажимает на кнопку, появится FileChooser чтобы пользоватедь выбирал файлы и открывал их.
OpenFileChooserDemo.java
package org.o7planning.javafx.filechooser;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class OpenFileChooserDemo extends Application {
private Desktop desktop = Desktop.getDesktop();
@Override
public void start(Stage primaryStage) throws Exception {
final FileChooser fileChooser = new FileChooser();
TextArea textArea = new TextArea();
textArea.setMinHeight(70);
Button button1 = new Button("Select One File and Open");
Button buttonM = new Button("Select Multi Files");
button1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
textArea.clear();
File file = fileChooser.showOpenDialog(primaryStage);
if (file != null) {
openFile(file);
List<File> files = Arrays.asList(file);
printLog(textArea, files);
}
}
});
buttonM.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
textArea.clear();
List<File> files = fileChooser.showOpenMultipleDialog(primaryStage);
printLog(textArea, files);
}
});
VBox root = new VBox();
root.setPadding(new Insets(10));
root.setSpacing(5);
root.getChildren().addAll(textArea, button1, buttonM);
Scene scene = new Scene(root, 400, 200);
primaryStage.setTitle("JavaFX FileChooser (o7planning.org)");
primaryStage.setScene(scene);
primaryStage.show();
}
private void printLog(TextArea textArea, List<File> files) {
if (files == null || files.isEmpty()) {
return;
}
for (File file : files) {
textArea.appendText(file.getAbsolutePath() + "\n");
}
}
private void openFile(File file) {
try {
this.desktop.open(file);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Application.launch(args);
}
}
3. Пример DirectoryChooser
Например, используйте DirectoryChooser чтобы выбрать папку:
DirectoryChooserDemo.java
package org.o7planning.javafx.filechooser;
import java.io.File;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
public class DirectoryChooserDemo extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
final DirectoryChooser directoryChooser = new DirectoryChooser();
configuringDirectoryChooser(directoryChooser);
TextArea textArea = new TextArea();
textArea.setMinHeight(70);
Button button = new Button("Open DirectoryChooser and select a directory");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
File dir = directoryChooser.showDialog(primaryStage);
if (dir != null) {
textArea.setText(dir.getAbsolutePath());
} else {
textArea.setText(null);
}
}
});
VBox root = new VBox();
root.setPadding(new Insets(10));
root.setSpacing(5);
root.getChildren().addAll(textArea, button);
Scene scene = new Scene(root, 400, 200);
primaryStage.setTitle("JavaFX DirectoryChooser (o7planning.org)");
primaryStage.setScene(scene);
primaryStage.show();
}
private void configuringDirectoryChooser(DirectoryChooser directoryChooser) {
// Set title for DirectoryChooser
directoryChooser.setTitle("Select Some Directories");
// Set Initial Directory
directoryChooser.setInitialDirectory(new File(System.getProperty("user.home")));
}
public static void main(String[] args) {
Application.launch(args);
}
}
4. Конфигурация для FileChooser, DirectoryChooser
Вы можете назвать FileChooser/DirectoryChooser и папка появится по умочанию когда пользователь открывает FileChooser/DirectoryChooser.
// Set title for FileChooser
fileChooser.setTitle("Select Some Files");
// Set Initial Directory
fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
ConfiguringFileChooserDemo.java
package org.o7planning.javafx.filechooser;
import java.io.File;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class ConfiguringFileChooserDemo extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
final FileChooser fileChooser = new FileChooser();
configuringFileChooser(fileChooser);
TextArea textArea = new TextArea();
textArea.setMinHeight(70);
Button button = new Button("Open File Chooser and select some files");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
fileChooser.showOpenDialog(primaryStage);
}
});
VBox root = new VBox();
root.setPadding(new Insets(10));
root.setSpacing(5);
root.getChildren().addAll(button);
Scene scene = new Scene(root, 400, 200);
primaryStage.setTitle("JavaFX FileChooser (o7planning.org)");
primaryStage.setScene(scene);
primaryStage.show();
}
private void configuringFileChooser(FileChooser fileChooser) {
// Set title for FileChooser
fileChooser.setTitle("Select Some Files");
// Set Initial Directory
fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
}
public static void main(String[] args) {
Application.launch(args);
}
}
5. Настроить фильтр FileChooser
Далее, вы можете конфигурировать FileChooser дополнительно в фильтры чтобы решить какие виды файлов будут отображаться на FileChooser. Например создать 3 фильтра, фильтр ALL- отображает все виды файлов, фильтр PNG отображает картины png, и фильтр JPG только отображает картины jpg.
// Add Extension Filters
fileChooser.getExtensionFilters().addAll(//
new FileChooser.ExtensionFilter("All Files", "*.*"),
new FileChooser.ExtensionFilter("JPG", "*.jpg"),
new FileChooser.ExtensionFilter("PNG", "*.png"));
The filters:
Фильтр All - Отображает все виды файлов и папок.
Фильтр PNG отображает только картины png или папки.
Смотреть полный пример:
FilterFileChooserDemo.java
package org.o7planning.javafx.filechooser;
import java.io.File;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class FilterFileChooserDemo extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
final FileChooser fileChooser = new FileChooser();
configuringFileChooser(fileChooser);
TextArea textArea = new TextArea();
textArea.setMinHeight(70);
Button button = new Button("Select some Pictures");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
fileChooser.showOpenDialog(primaryStage);
}
});
VBox root = new VBox();
root.setPadding(new Insets(10));
root.setSpacing(5);
root.getChildren().addAll(button);
Scene scene = new Scene(root, 400, 200);
primaryStage.setTitle("JavaFX FileChooser (o7planning.org)");
primaryStage.setScene(scene);
primaryStage.show();
}
private void configuringFileChooser(FileChooser fileChooser) {
// Set title for FileChooser
fileChooser.setTitle("Select Pictures");
// Set Initial Directory
fileChooser.setInitialDirectory(new File("C:/Users/tran/Pictures"));
// Add Extension Filters
fileChooser.getExtensionFilters().addAll(//
new FileChooser.ExtensionFilter("All Files", "*.*"), //
new FileChooser.ExtensionFilter("JPG", "*.jpg"), //
new FileChooser.ExtensionFilter("PNG", "*.png"));
}
public static void main(String[] args) {
Application.launch(args);
}
}
Руководства JavaFX
- Откройте новое окно (window) в JavaFX
- Руководство JavaFX ChoiceDialog
- Руководство JavaFX Alert Dialog
- Руководство JavaFX TextInputDialog
- Установите e(fx)clipse для Eclipse (JavaFX Tooling)
- Установите JavaFX Scene Builder для Eclipse
- Руководство JavaFX для начинающих - Hello JavaFX
- Руководство JavaFX FlowPane Layout
- Руководство JavaFX TilePane Layout
- Руководство JavaFX HBox, VBox Layout
- Руководство JavaFX BorderPane Layout
- Руководство JavaFX AnchorPane Layout
- Руководство JavaFX TitledPane
- Руководство JavaFX Accordion
- Руководство JavaFX ListView
- Руководство JavaFX Group
- Руководство JavaFX ComboBox
- Руководство JavaFX Transformations
- Эффекты (effects) в JavaFX
- Руководство JavaFX GridPane Layout
- Руководство JavaFX StackPane Layout
- Руководство JavaFX ScrollPane
- Руководство JavaFX WebView и WebEngine
- Руководство JavaFX HTMLEditor
- Руководство JavaFX TableView
- Руководство JavaFX TreeView
- Руководство JavaFX TreeTableView
- Руководство JavaFX Menu
- Руководство JavaFX ContextMenu
- Руководство JavaFX Image и ImageView
- Руководство JavaFX Label
- Руководство JavaFX Hyperlink
- Руководство JavaFX Button
- Руководство JavaFX ToggleButton
- Руководство JavaFX RadioButton
- Руководство JavaFX MenuButton и SplitMenuButton
- Руководство JavaFX TextField
- Руководство JavaFX PasswordField
- Руководство JavaFX TextArea
- Руководство JavaFX Slider
- Руководство JavaFX Spinner
- Руководство JavaFX ProgressBar и ProgressIndicator
- Руководство JavaFX ChoiceBox
- Руководство JavaFX Tooltip
- Руководство JavaFX DatePicker
- Руководство JavaFX ColorPicker
- Руководство JavaFX FileChooser и DirectoryChooser
- Руководство JavaFX PieChart
- Руководство JavaFX AreaChart и StackedAreaChart
- Руководство JavaFX BarChart и StackedBarChart
- Руководство JavaFX Line
- Руководство JavaFX Rectangle и Ellipse
Show More