我正在使用JFileChooser
作为导出功能的一部分。我希望用户能够从JFileChooser
的文件查看器中选择文件或在文件名文本框中输入文件名。根据我的阅读,可以使用该getSelectedFile()
方法获取该值,因此我有一些侦听器会在执行导出之前调用getSelectedFile()
并尝试进行一些检查。
我遇到的问题是,getSelectedFile()
当我在文件名文本框中手动输入名称时,该方法返回 null。为了增加更多的混乱,该getSelectedFile()
方法确实在三种不同的情况下工作:
setSelectedFile()
我通过(用户单击表中的值并使用setSelectedFile()
)填充它- 我在文件查看器中单击现有文件
- 我在填充文件名文本框后按 ENTER
我有三个文件过滤器,但无论是否启用它们都具有相同的行为。
调用的监听器getSelectedFile()
如下:
- keyReleased 的事件监听器
- mousePressed 的事件监听器。
- 我的 jFileChooser 上的 PropertyChangeEvent 侦听器
- 我的 jFileChooser 上的动作监听器
有没有更好的方法来收听我的 jFileChooser 以获取用户输入?我觉得我错过了一些非常明显的东西......感谢任何帮助!
编辑 更多信息...
我在 a 中有一个JFileChooser
组件JSplitPane
,它在 a 中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() 来获取用户选择的文件。但是,在这两种情况下,它都保持为空,直到用户执行上述三种方法之一