2014-05-15 2 views
0

J'écris un programme Java "simple" qui permet à l'utilisateur de changer de fond d'écran. Il remplit essentiellement un JList avec des fichiers à partir d'un répertoire du choix des utilisateurs et l'utilisateur double-clique pour définir l'un des fichiers comme fond d'écran. Simple!Java, extension de fichier pour obtenir plus d'attributs

Je voudrais encore quelques attributs (quoique de isFavorite booléenne, par exemple) pour donner le programme plus de fonctionnalités, mais je ne suis pas sûr comment faire ...

J'ai essayé de faire ma propre classe Fond d'écran qui a étendu le fichier, mais en essayant de remplir mon JList avec des fonds d'écran à la place, j'ai eu toutes sortes d'erreurs de casting de classe lors du passage entre les fichiers et les fonds d'écran. J'ai donc fini par remplacer de plus en plus les méthodes File jusqu'à ce que je sois dans un tel réseau d'erreurs mystérieuses dont je ne savais pas comment sortir.

J'ai eu l'idée de remplir mon JList avec les fichiers d'Andrew qui le fait dans sa réponse ici: JList that contains the list of Files in a directory

mine ressemble à ceci,

File wallFile = new File(System.getProperty("user.home")); 

//Create the file array 
File[] fileArray = wallFile.listFiles(new TextFileFilter()); 

//Put File objects in the list 
JList<File> fileList = new JList<File>(fileArray); 

Depuis que je sais que je ne suis pas faire quoi que ce soit unique ici, je sais qu'il devrait y avoir "approuvé" des façons de le faire, alors quelqu'un pourrait m'éclairer sur la meilleure façon de changer du fichier intégré à un fond d'écran personnalisé?

Répondre

1

La méthode listFiles() utilisera la classe File par défaut, pas votre classe WallPaper étendue. Par conséquent, vous obtiendrez une erreur si vous essayez de convertir un de ces objets en WallPaper. Au lieu de cela, faites ceci:

String [] nameArray = wallFile.list(new TextFileFilter()); 
File [] fileArray = new File [nameArray.length]; 
for (int i=0;i<nameArray.length;i++) 
    fileArray[i] = new WallPaper(new File(wallFile, nameArray[i]).getAbsolutePath());//provided you have a WallPaper constructor that accepts an absolute path 
+0

Le constructeur de ma classe Wallpaper prend juste un argument String (String filePath) et appelle ensuite "super (filePath);" Je ne suis pas sûr si je devrais appeler le constructeur de fichier par le biais de super() ou si je devrais faire le mien ... Je suis encore un peu perturbé par ces conceptions de programmation orientées objet. – Dunderklumpen

+0

@Dunderklumpen Ce que vous décrivez sonne bien. Gardez le bit super (filePath). – schmop

+0

D'accord, j'ai dû changer autour d'un peu, a dû changer "File [] fileArray" en "Wallpaper [] fileArray" et changer File to Wallpaper dans un tas d'endroits, mais il semble bien fonctionner maintenant et le champ "isFavorite " peut être utilisé. Un grand merci pour la réponse rapide et facile! – Dunderklumpen

Questions connexes