Si in effetti avevi ragione sul model.
non aveva senso.
cmq inizialmente il jtree è vuoto.
viene riempito solo quando viene selezionata una directory con il JFileChooser.
quindi diciamo che non c'è neanche il "pericolo" che venga selezionato un file.
quindi sull'evento ho messo questo:
                FileChooserOpen fco = new FileChooserOpen();
                fco.showOpenDialog(null);
                File dir = fco.getDir();
                DefaultMutableTreeNode root = scanDir(dir);
                DefaultTreeModel model = new DefaultTreeModel(root);
                tree.setModel(model);
e poi ho modificato il metodo scanDir come da tuo esempio:
    private DefaultMutableTreeNode scanDir(File file) {
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(file);
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            Arrays.sort(files, new MyComparator());
            for (File f : files) {
                DefaultMutableTreeNode childNode = scanDir(f);
                node.add(childNode);
            }
        }
        return node;
    }
i nodi si riempiono correttamente.
però continua a non essere ordinato.
nel senso che viene ordinato alfabeticamente, me senza mettere prima le directory e poi file.
ti riposto il comparator, dovesse essere sbagliato la:
public class MyComparator implements Comparator<File> {
    @Override
    public int compare(File f1, File f2) {
        if (f1.isFile() && f2.isDirectory()) {
            return 1;
        } else if (f1.isDirectory() && f2.isFile()) {
            return -1;
        } else {
            return f1.getName().compareTo(f2.getName());
        }
    }
}