如何在JFileChooser中监听'文件名'TextField的更改?

时间:2014-04-16 15:04:09

标签: java swing jfilechooser

我需要在javax.swing.JFileChooser中标记为“文件名”的文本字段中获取最新的文字字段。

我不需要最新选择的文件,因为输入“文件名”的文本应该作为新创建文件的名称。

我使用SELECTED_FILE_CHANGED_PROPERTY,但只在文件选择时触发。 还有FILE_FILTER_CHANGED_PROPERTY,但是当我更改文件类型时会触发它。

如何收听“文件名”文本字段的更改?

谢谢!

2 个答案:

答案 0 :(得分:2)

注意:仅当选择了单个项目时才会触发SELECTED_FILE_CHANGED_PROPERTY个事件。

特别是,如果在启用多选模式时选择了多个项目,则不会触发此事件。但是,如果在多选模式下选择了单个项目,则会触发此事件。

当处于多选模式时,无论是否选择了单个或多个文件,都会触发SELECTED_FILES_CHANGED_PROPERTY个事件。

JFileChooser chooser = new JFileChooser();

// Add listener on chooser to detect changes to selected file
chooser.addPropertyChangeListener(new PropertyChangeListener() {
    public void propertyChange(PropertyChangeEvent evt) {
        if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY
                .equals(evt.getPropertyName())) {
            JFileChooser chooser = (JFileChooser)evt.getSource();
            File oldFile = (File)evt.getOldValue();
            File newFile = (File)evt.getNewValue();

            // The selected file should always be the same as newFile
            File curFile = chooser.getSelectedFile();
        } else if (JFileChooser.SELECTED_FILES_CHANGED_PROPERTY.equals(
                evt.getPropertyName())) {
            JFileChooser chooser = (JFileChooser)evt.getSource();
            File[] oldFiles = (File[])evt.getOldValue();
            File[] newFiles = (File[])evt.getNewValue();

            // Get list of selected files
            // The selected files should always be the same as newFiles
            File[] files = chooser.getSelectedFiles();
        }
    }
}) ;

答案 1 :(得分:1)

你想要的是带有JFileChooser旗帜的SAVE_DIALOG

一些演示代码:

JFileChooser chooser = new JFileChooser("some path");
chooser.setDialogType(JFileChooser.SAVE_DIALOG);
// Stuff like setting the required file extension, the title, ...
int result = chooser.showSaveDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
    String path = chooser.getSelectedFile().toString();
    // Do something with the path
}
chooser.setVisible(false); // Don't forget to hide