Hướng dẫn và ví dụ JavaFX FileChooser và DirectoryChooser
1. JavaFX FileChooser, DirectoryChooser
FileChooser cho phép người dùng điều hướng file hệ thống để chọn một hoặc nhiều file. Một thành phần tương tự là DirectoryChooser cho phép người dùng lựa chọn một thư mục.
Dưới đây là hình ảnh của FileChooser/DirectoryChooser khi nó được chạy trên các hệ điều hành khác nhau.
Mac OS
Windows
Linux
2. Ví dụ với FileChooser
Ví dụ dưới đây, khi người dùng click vào button, một FileChooser sẽ hiển thị để người dùng lựa chọn các file và mở nó.
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. Ví dụ DirectoryChooser
Ví dụ sử dụng DirectoryChooser để chọn một thư mục:
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 tiêu đề cho DirectoryChooser
directoryChooser.setTitle("Select Some Directories");
// Sét thư mục bắt đầu nhìn thấy khi mở DirectoryChooser
directoryChooser.setInitialDirectory(new File(System.getProperty("user.home")));
}
public static void main(String[] args) {
Application.launch(args);
}
}
4. Cấu hình cho FileChooser, DirectoryChooser
Bạn có thể sét đặt tiêu đề cho FileChooser/DirectoryChooser và thư mục hiển thị mặc định khi người dùng vừa mở FileChooser/DirectoryChooser.
// Set tiêu đề cho FileChooser
fileChooser.setTitle("Select Some Files");
// Sét thư mục bắt đầu nhìn thấy khi mở FileChooser
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 tiêu đề cho FileChooser
fileChooser.setTitle("Select Some Files");
// Sét thư mục bắt đầu nhìn thấy khi mở FileChooser
fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
}
public static void main(String[] args) {
Application.launch(args);
}
}
5. Sét đặt bộ lọc FileChooser
Tiếp theo bạn có thể cấu hình FileChooser thêm vào các bộ lọc để quyết định các loại file nào sẽ hiển thị trên FileChooser. Chẳng hạn tạo ra 3 bộ lọc, bộ lọc ALL- hiển thị tất cả các loại file, bộ lọc PNG chỉ hiển thị các ảnh png, và bộ lọc JPG chỉ hiển thị các ảnh jpg.
// Thêm các bộ lọc file vào
fileChooser.getExtensionFilters().addAll(//
new FileChooser.ExtensionFilter("All Files", "*.*"),
new FileChooser.ExtensionFilter("JPG", "*.jpg"),
new FileChooser.ExtensionFilter("PNG", "*.png"));
The filters:
Bộ lọc All - Hiển thị tất cả các kiểu file và cả folder.
Bộ lọc PNG chỉ hiển thị các ảnh png hoặc các folder.
Xem ví dụ đầy đủ:
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 tiêu đề cho FileChooser
fileChooser.setTitle("Select Pictures");
// Sét thư mục bắt đầu nhìn thấy khi mở FileChooser
fileChooser.setInitialDirectory(new File("C:/Users/tran/Pictures"));
// Thêm các bộ lọc file vào
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);
}
}
Các hướng dẫn lập trình JavaFX
- Mở một cửa sổ (window) mới trong JavaFX
- Hướng dẫn và ví dụ JavaFX ChoiceDialog
- Hướng dẫn và ví dụ JavaFX Alert Dialog
- Hướng dẫn và ví dụ JavaFX TextInputDialog
- Cài đặt e(fx)clipse cho Eclipse (Bộ công cụ lập trình JavaFX)
- Cài đặt JavaFX Scene Builder cho Eclipse
- Hướng dẫn lập trình JavaFX cho người mới bắt đầu - Hello JavaFX
- Hướng dẫn và ví dụ JavaFX FlowPane Layout
- Hướng dẫn và ví dụ JavaFX TilePane Layout
- Hướng dẫn và ví dụ JavaFX HBox, VBox Layout
- Hướng dẫn và ví dụ JavaFX BorderPane Layout
- Hướng dẫn và ví dụ JavaFX AnchorPane Layout
- Hướng dẫn và ví dụ JavaFX TitledPane
- Hướng dẫn và ví dụ JavaFX Accordion
- Hướng dẫn và ví dụ JavaFX ListView
- Hướng dẫn và ví dụ JavaFX Group
- Hướng dẫn và ví dụ JavaFX ComboBox
- Hướng dẫn sử dụng các phép biến hình (Transformations) trong JavaFX
- Các hiệu ứng (effects) trong JavaFX
- Hướng dẫn và ví dụ JavaFX GridPane Layout
- Hướng dẫn và ví dụ JavaFX StackPane Layout
- Hướng dẫn và ví dụ JavaFX ScrollPane
- Hướng dẫn và ví dụ JavaFX WebView và WebEngine
- Hướng dẫn và ví dụ JavaFX HTMLEditor
- Hướng dẫn và ví dụ JavaFX TableView
- Hướng dẫn và ví dụ JavaFX TreeView
- Hướng dẫn và ví dụ JavaFX TreeTableView
- Hướng dẫn và ví dụ JavaFX Menu
- Hướng dẫn và ví dụ JavaFX ContextMenu
- Hướng dẫn và ví dụ JavaFX Image và ImageView
- Hướng dẫn và ví dụ JavaFX Label
- Hướng dẫn và ví dụ JavaFX Hyperlink
- Hướng dẫn và ví dụ JavaFX Button
- Hướng dẫn và ví dụ JavaFX ToggleButton
- Hướng dẫn và ví dụ JavaFX RadioButton
- Hướng dẫn và ví dụ JavaFX MenuButton và SplitMenuButton
- Hướng dẫn và ví dụ JavaFX TextField
- Hướng dẫn và ví dụ JavaFX PasswordField
- Hướng dẫn và ví dụ JavaFX TextArea
- Hướng dẫn và ví dụ JavaFX Slider
- Hướng dẫn và ví dụ JavaFX Spinner
- Hướng dẫn và ví dụ JavaFX ProgressBar và ProgressIndicator
- Hướng dẫn và ví dụ JavaFX ChoiceBox
- Hướng dẫn và ví dụ JavaFX Tooltip
- Hướng dẫn và ví dụ JavaFX DatePicker
- Hướng dẫn và ví dụ JavaFX ColorPicker
- Hướng dẫn và ví dụ JavaFX FileChooser và DirectoryChooser
- Hướng dẫn và ví dụ JavaFX PieChart
- Hướng dẫn và ví dụ JavaFX AreaChart và StackedAreaChart
- Hướng dẫn và ví dụ JavaFX BarChart và StackedBarChart
- Hướng dẫn và ví dụ JavaFX Line
- Hướng dẫn và ví dụ JavaFX Rectangle và Ellipse
Show More