questo è il JFC richiamato da un JFrame:
codice:
public class FileChooserCapture extends JFrame {

    private File file = null;

    public void salva() throws AWTException, IOException {
        JFileChooser fc = new JFileChooser();

        FileFilter jpegFilter = new FileNameExtensionFilter("File JPG/JPEG", "jpeg");
        FileFilter gifFilter = new FileNameExtensionFilter("File GIF", "gif");
        FileFilter pngFilter = new FileNameExtensionFilter("File PNG", "png");
        fc.addChoosableFileFilter(gifFilter);
        fc.addChoosableFileFilter(pngFilter);
        fc.addChoosableFileFilter(jpegFilter);

        int returnVal = fc.showSaveDialog(fc);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = fc.getSelectedFile();
            FileFilter selectedFilter = fc.getFileFilter();
            if (file.getName().indexOf('.') == -1) {
                if (selectedFilter == jpegFilter) {
                    file = new File(file.getPath() + ".jpeg");
                } else if (selectedFilter == gifFilter) {
                    file = new File(file.getPath() + ".gif");
                } else if (selectedFilter == pngFilter) {
                    file = new File(file.getPath() + ".png");
                }
            }
            if (file.exists()) {
                String msg = MessageFormat.format("The entry ''{0}'' already exists.\nDo you want to replace it?", new Object[]{file});
                int r = JOptionPane.showConfirmDialog(null, msg, "Confirm", JOptionPane.YES_NO_OPTION);
                if (r == JOptionPane.NO_OPTION) {
                    return;
                }
            }
            // nascondere jfc
            Thread.sleep(1000);
            if (Screen.getRadioManual().isSelected()) {
                int x = Integer.parseInt(Screen.getTxtX().getText());
                int y = Integer.parseInt(Screen.getTxtY().getText());
                int w = Integer.parseInt(Screen.getTxtW().getText());
                int h = Integer.parseInt(Screen.getTxtH().getText());
                TakeScreen.manualScreen(formato(), file.toString(), x, y, w, h);
            } else {
                TakeScreen.autoScreen(formato(), file.toString());
            }
        }
    }

    public String formato() {
        String ext = file.toString();
        String formato = ext.substring(ext.lastIndexOf(".") + 1);
        return formato;
    }
}
in pratica un classico JFC con flitri che imposta percorso e nome di salvataggio di un file.
dopo di che il programma continua scattando una foto del desktop salvando il file prendendolo dal JFC.
il problema è che nella finestra rientra anche il JFC e nn dovrebbe.
per ovviare per ora ho impostato uno sleep, ma c'è un modo migliore per nascondoere il JFC dopo aver scelto dove salvare il file??