我使用JFileChooser
作为导出功能的一部分。我希望用户能够从JFileChooser
的文件查看器中选择文件,或在文件名文本框中输入文件的名称。根据我的阅读,可以使用getSelectedFile()
方法获取该值,因此我有一些调用getSelectedFile()
的侦听器并尝试在执行导出之前进行一些检查。
我遇到的问题是,当我手动将名称输入文件名文本框时,getSelectedFile()
方法返回null。为了增加更多的混淆,getSelectedFile()
方法在三种不同的情况下都有效:
setSelectedFile()
填充它(用户点击了表中的值并使用了setSelectedFile()
)我有三个文件过滤器,但无论是否启用它们都具有相同的行为。
致电getSelectedFile()
的听众如下:
有没有更好的方法来收听我的jFileChooser来获取用户输入?我觉得我错过了一些非常明显的东西......感谢任何帮助!
修改 多一点信息......
我在JFileChooser
中有JSplitPane
个组件,该组件位于JFrame
中。我没有打电话给showOpenDialog
来获取用户的意见。该组件可作为表单的一部分访问。
我想要做的是在他/她输入时收听用户输入。我有一个“开始导出”按钮,我想要禁用,直到用户在JFileChooser
组件的文件名文本框中输入了有效的文件名。为了实现这一点,我有一个KeyEvent监听器,我想用它来获取用户输入的文件名。
进一步修改
以下是动作侦听器代码:
jFileChooserExport.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jFileChooserExportActionPerformed(evt);
}
});
我在这里也有一个属性更改侦听器:
jFileChooserExport.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
jFileChooserExportPropertyChange(evt);
}
});
在jFileChooserExportPropertyChange和jFileChooserExportActionPerformed中,我试图通过调用getSelectedFile()来获取用户选择的文件。但是,在这两种情况下,它都保持为空,直到用户执行上述三种方法之一
答案 0 :(得分:2)
阅读How to Use File Choosers上的Swing教程中的部分。那里的演示代码对我来说很好。
答案 1 :(得分:0)
由于下列内容似乎都不起作用,您可能需要尝试{JQileChooser add a PropertyChangeListener,并聆听SELECTED_FILE_CHANGED_PROPERTY
可能发生的情况是您的文件选择器可能有multi selection enabled,在这种情况下getSelectedFile
将返回null,但getSelectedFiles
将返回包含所选文件的数组。您可能想要disable multi selection或使用数组(如果您希望用户只选择一个文件,请将multiSelectionEnabled设置为false)。
另一种可能性是,如果您尝试获取所选文件,但fileChooser.showOpenDialog
或fileChooser.showSaveDialog
尚未被调用或未返回JFileChooser.APPROVE_OPTION
另外,我认为JFileChooser区分大小写,所以如果文件名是“Foo.bar”并输入“FoO.bar”,它会认为你想要别的东西。