开发者社区 问答 正文

JavaFX使用SwingNode嵌入JFileChooser并获取所选文件

我已经使用SwingNode将JFileChooser集成到JavaFX应用程序中。该对话框显示并可用,但是我不确定如何从中获取所选文件。

谢谢你的帮助。

@FXML
public void openDialog(MouseEvent event) {
    SwingNode swingNode = new SwingNode();

    SwingUtilities.invokeLater(() -> {
        swingNode.setContent(fileChooser);
    });

    BorderPane pane = new BorderPane();
    pane.setCenter(swingNode);

    Stage stage = new Stage();

    Scene scene = new Scene(pane, 500, 500);
    stage.setScene(scene);
    stage.show();
}

展开
收起
几许相思几点泪 2019-12-16 20:32:14 614 分享 版权
阿里云 AI 助理回答

在您的JavaFX应用程序中,您已经成功地使用SwingNode来集成和显示JFileChooser。为了从JFileChooser中获取所选文件,您需要为它添加一个监听器或者处理选择事件。当用户在对话框中选择文件后,JFileChooseraddActionListener方法可以帮您捕获到用户的确认动作,并从中获取选定的文件。下面是如何修改您的代码以实现这一功能:

@FXML
public void openDialog(MouseEvent event) {
    final JFileChooser fileChooser = new JFileChooser(); // 确保fileChooser是final的,以便在内部类中使用

    SwingUtilities.invokeLater(() -> {
        // 设置文件选择器的属性等...
        swingNode.setContent(fileChooser);

        // 添加一个监听器来处理文件选择事件
        fileChooser.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) {
                    File selectedFile = fileChooser.getSelectedFile();
                    System.out.println("Selected File: " + selectedFile.getAbsolutePath());

                    // 在这里处理选定的文件,例如读取文件内容、显示文件信息等
                }
            }
        });
    });

    BorderPane pane = new BorderPane();
    pane.setCenter(swingNode);

    Stage stage = new Stage();

    Scene scene = new Scene(pane, 500, 500);
    stage.setScene(scene);
    stage.show();

    // 注意:根据实际需求,可能需要在这里或合适的地方调用fileChooser.showOpenDialog(null);
}

请注意,我添加了一个ActionListenerJFileChooser上,当用户点击"打开"(或类似操作)按钮时,会触发actionPerformed方法。在这个方法里,我们检查事件的动作命令是否为JFileChooser.APPROVE_SELECTION,如果是,则表示用户已成功选择文件,此时可以通过fileChooser.getSelectedFile()获取用户选择的文件对象。

另外,请确保在适当的时候调用fileChooser.showOpenDialog(null);来显示对话框并等待用户交互。通常这会在Swing线程中完成,但根据您的应用逻辑,可能需要在特定时机手动调用。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: