从jFileChooser组件创建文件

时间:2011-02-09 16:01:14

标签: java swing jfilechooser

我使用JFileChooser作为导出功能的一部分。我希望用户能够从JFileChooser的文件查看器中选择文件,或在文件名文本框中输入文件的名称。根据我的阅读,可以使用getSelectedFile()方法获取该值,因此我有一些调用getSelectedFile()的侦听器并尝试在执行导出之前进行一些检查。

我遇到的问题是,当我手动将名称输入文件名文本框时,getSelectedFile()方法返回null。为了增加更多的混淆,getSelectedFile()方法在三种不同的情况下都有效:

  1. 我通过setSelectedFile()填充它(用户点击了表中的值并使用了setSelectedFile()
  2. 我单击文件查看器中的现有文件
  3. 填写文件名文本框
  4. 后按Enter键

    我有三个文件过滤器,但无论是否启用它们都具有相同的行为。

    致电getSelectedFile()的听众如下:

    • keyReleased的事件监听器
    • mousePressed的事件监听器。
    • 我的jFileChooser上的PropertyChangeEvent侦听器
    • 我的jFileChooser上的动作侦听器

    有没有更好的方法来收听我的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()来获取用户选择的文件。但是,在这两种情况下,它都保持为空,直到用户执行上述三种方法之一

2 个答案:

答案 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.showOpenDialogfileChooser.showSaveDialog尚未被调用或未返回JFileChooser.APPROVE_OPTION

另外,我认为JFileChooser区分大小写,所以如果文件名是“Foo.bar”并输入“FoO.bar”,它会认为你想要别的东西。