6
votes

Utiliser UIGETFile au lieu de UIGETDIR pour obtenir des répertoires à Matlab

J'ai donc une question sur GUI de sélection de répertoire MATLAB. J'ai besoin d'utiliser une interface graphique pour sélectionner un répertoire, mais le problème est que l'interface UIGETDIR est affreuse. Si j'appelle comme ceci: xxx

C'est ce qu'il me montre:

 UIGETDIR Résultats

Comme vous pouvez le constater, c'est affreux. Il y a une tonne d'informations étrangères sur l'emplacement du fichier dans le système de fichiers et les informations pertinentes est au-dessous du pli. Idéalement, je voudrais spécifier que la fonction UIGETDIR utilise l'interface graphique UIGETFILE, ou simplement passer une dispute à UIGETFile Dites-le que je cherche un répertoire, pas un fichier unique, car c'est ce que l'on ressemble à l'interface de l'UIGETFILE:

Résultats uigetfile

Mais bien sûr, cela nécessite que je Sélectionnez un fichier, pas un répertoire. Évidemment, les répertoires ne sont pas ouverts, alors je suppose que je pouvais simplement avoir l'utilisateur de sélectionner un fichier aléatoire dans le dossier et je peux obtenir le chemin de chemin, mais y a-t-il une meilleure façon de le faire? Dans une autre application, je pouvais imaginer que ma solution de contournement "Sélectionner un fichier dans le dossier" ne fonctionnerait pas.

update

J'ai fait un certain très mineur Ajustements du code de Andrew Janke pour le faire prendre les mêmes arguments que UIGETDIR (). Voici ce que je suis venu avec: xxx


1 commentaires

@ user1740374 Vous ne pouvez pas commenter en modifiant une question. Les commentaires seront disponibles pour vous lorsque vous gagnez suffisamment de réputation.


3 Réponses :


9
votes

Yuck.

Vous pouvez contourner UIGETDIR () et écrire votre propre fonction de sélecteur de fichiers en appelant directement des objets Java Swing, y compris le jfilechooser. Qui est probablement ce que UIGETFILE () fait sous la hotte. xxx


0 commentaires

4
votes

J'ai changé cette fonction pour pouvoir sélectionner plusieurs fichiers et dossiers en même temps xxx


2 commentaires

Votre code ne fonctionne pas pour les premiers paramètres non actionnés, essayez uIGETFilesandDirs ('C: \') . Votre StartPath == Comparaisons Les tableaux de retour, ce qui n'est pas ce que vous voulez!


Travaille pour moi. Simple et génial!



1
votes

Basé sur Andrew Janke's Réponse J'ai créé un morceau de code qui utilise la boîte de dialogue MATLAB et active Multi Select pour les répertoires:

function [files] = uigetdirMultiSelect()

import com.mathworks.mwswing.MJFileChooserPerPlatform;
jchooser = javaObjectEDT('com.mathworks.mwswing.MJFileChooserPerPlatform');
jchooser.setFileSelectionMode(javax.swing.JFileChooser.DIRECTORIES_ONLY);
jchooser.setMultiSelectionEnabled(true);

jchooser.showOpenDialog([]);

if jchooser.getState() == javax.swing.JFileChooser.APPROVE_OPTION
    jFiles = jchooser.getSelectedFiles();
    files = arrayfun(@(x) char(x.getPath()), jFiles, 'UniformOutput', false);
elseif jchooser.getState() == javax.swing.JFileChooser.CANCEL_OPTION
    files = [];
else
    error('Error occurred while picking file');
end


1 commentaires

Travaillé pour moi sur Ubuntu 18.04