4

JFileChooserAPI に明らかな何かが欠けている可能性がありますが、a を使用しJFileChooserてファイルを保存しようとすると、既存のファイルを選択して保存することしかできず、新しい名前を入力して保存することはできません。それは可能ですか、JFileChooserそれとも別の API を使用する必要がありますか?

私が試みていることを試して実行するためのこのコードがあります:

public static File getUserFile() {      
    final SaveFileChooser fc = new SaveFileChooser();

    fc.setAcceptAllFileFilterUsed(false);

    for(FileFilter ch : FileFilterUtils.getAllFilters()) {
        fc.addChoosableFileFilter(ch);
    }       

    int option = fc.showSaveDialog(JPad.getFrame());

    if (option == JFileChooser.APPROVE_OPTION) {
        return fc.getSelectedFile();
    } 
    return null;
}

public static class SaveFileChooser extends JFileChooser {
    private static final long serialVersionUID = -8175471295012368922L;

    @Override
    public void approveSelection() {
        File f = getSelectedFile();
        if(f.exists() && getDialogType() == SAVE_DIALOG){
            int result = JOptionPane.showConfirmDialog(JPad.getFrame(), "The file exists, overwrite?", "Existing file", JOptionPane.YES_NO_CANCEL_OPTION);

            switch(result){
            case JOptionPane.YES_OPTION:
                super.approveSelection();
                return;
            case JOptionPane.NO_OPTION:
                return;
            case JOptionPane.CLOSED_OPTION:
                return;
            case JOptionPane.CANCEL_OPTION:
                cancelSelection();
                return;
            }
        }
    }
}
4

2 に答える 2

4

あなたの状態をチェックしてくださいif

if(f.exists() && getDialogType() == SAVE_DIALOG)

が存在しない場合はどうfなりますか (これは可能にしたいことです)。

あなたは試すことができます:

if(getDialogType() == SAVE_DIALOG) {
    if(f.exists()) {
        // your overwrite checking
    } else {
        super.approveSelection();
        return;
    }
}
于 2012-12-06T07:30:08.773 に答える
1

これを試して

    File file = null;
    String path = "";
    JFileChooser chooser = new JFileChooser();
    chooser.addChoosableFileFilter(new ImageFileFilter());
    int returnVal = chooser.showOpenDialog(null);

    if (returnVal == JFileChooser.APPROVE_OPTION) {
        file = chooser.getSelectedFile();
        path = file.getPath();

        repaint();

    }

}                                        

class ImageFileFilter extends FileFilter {

    public boolean accept(File file) {
        if (file.isDirectory()) {
            return false; //or ur code what file u want to return
        }}
于 2012-12-06T09:22:55.070 に答える