赞
踩
在使用桌面应用程序的时候我们都会发现上面有工具栏,那么JavaFX如何创建工具栏并且通过FileDialog获取文件呢?
在JavaFX中工具栏为MenuBar,这个是装载菜单的工具通过getMenus()方法可以向其加入不同的Menu,而Menu中每一项都是一个MenuItem
代码如下:
- public class Main extends Application {
- private Scene scene = null;
- private static final int WIDTH = 300;
- private static final int HEIGTH = 300;
- private final MenuBar menuBar = new MenuBar();
- private final Menu fileMenu = new Menu("文件");
- private final Menu editMenu = new Menu("编辑");
- private final Menu helpMenu = new Menu("帮助");
- private final MenuItem openFile = new MenuItem("打开文件");
- private final MenuItem exit = new MenuItem("关闭");
-
- private void initComponents() {
- scene = new Scene(new BorderPane(), WIDTH, HEIGTH);
- BorderPane root = (BorderPane) scene.getRoot();
- menuBar.getMenus().addAll(fileMenu, editMenu, helpMenu);
- fileMenu.getItems().addAll(openFile, exit);
- root.setTop(menuBar);
- }
-
- @Override
- public void start(Stage stage) throws Exception {
- initComponents();
- stage.setScene(scene);
- stage.show();
- }
-
- public static void main(String[] args) {
- launch(args);
- }
- }
效果就是这个样子滴:
那么我们就可以给MenuItem添加事件了
在里面添加一个方法,在类中添加一个成员变量用来接收文件,然后我们打开一个文件试试就知道了
- /* 记得要在start()中调用啊 */
- private void initEvent() {
- fileMenu.setOnAction(e -> {
- FileChooser fileChooser = new FileChooser();
- file = fileChooser.showOpenDialog(new Stage());
- System.out.println(file);
- });
- }
触发事件之后控制台输出了文件的路径
没有任何问题
然后就可以对文件进行一些操作了
然后进阶一点,给FileChooser添加过滤器
- private void initEvent() {
- fileMenu.setOnAction(e -> {
- FileChooser fileChooser = new FileChooser();
- fileChooser.getExtensionFilters().addAll(
- new FileChooser.ExtensionFilter("XLS", "*.xls"),
- new FileChooser.ExtensionFilter("XLSX", "*.xlsx"),
- new FileChooser.ExtensionFilter("DOC", "*.doc"),
- new FileChooser.ExtensionFilter("DOCX", "*.docx")
- );
- file = fileChooser.showOpenDialog(new Stage());
- System.out.println(file);
- });
- }
效果就是这个样子滴
FileChooser还可以设置默认打开路径
- FileChooser fileChooser = new FileChooser();
- fileChooser.setInitialDirectory(new File("D:/test"));
- fileChooser.getExtensionFilters().addAll(
- new FileChooser.ExtensionFilter("XLS", "*.xls"),
- new FileChooser.ExtensionFilter("XLSX", "*.xlsx"),
- new FileChooser.ExtensionFilter("DOC", "*.doc"),
- new FileChooser.ExtensionFilter("DOCX", "*.docx")
- );
- file = fileChooser.showOpenDialog(new Stage());
- System.out.println(file);
至于如何实现每一次打开都是上一次点开的文件目录
可以自己写一个用于缓存的日志,每次触发事件后将本次文件目录写入文件中,然后再次触发事件的时候先读取文件的最后一次打开的目录,将fileChooser.setInitialDirectory()中设置为缓存文件最后一次读取到的目录就可以了
(兄弟姐妹们点点赞吧)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。