我已经使用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();
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您的JavaFX应用程序中,您已经成功地使用SwingNode
来集成和显示JFileChooser
。为了从JFileChooser
中获取所选文件,您需要为它添加一个监听器或者处理选择事件。当用户在对话框中选择文件后,JFileChooser
的addActionListener
方法可以帮您捕获到用户的确认动作,并从中获取选定的文件。下面是如何修改您的代码以实现这一功能:
@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);
}
请注意,我添加了一个ActionListener
到JFileChooser
上,当用户点击"打开"(或类似操作)按钮时,会触发actionPerformed
方法。在这个方法里,我们检查事件的动作命令是否为JFileChooser.APPROVE_SELECTION
,如果是,则表示用户已成功选择文件,此时可以通过fileChooser.getSelectedFile()
获取用户选择的文件对象。
另外,请确保在适当的时候调用fileChooser.showOpenDialog(null);
来显示对话框并等待用户交互。通常这会在Swing线程中完成,但根据您的应用逻辑,可能需要在特定时机手动调用。