2011-03-01 4 views
3

Comment ajouter dynamiquement des images en pot? Est-ce même possible?Ajouter dynamiquement des images dans un pot

Dans mon projet de swing, je laisse l'utilisateur sélectionner son user_image en utilisant JFileChooser. Maintenant, je ne suis pas en mesure d'utiliser la base de données. Donc je pense que si je peux ajouter l'image téléchargée dans le pot, puis la récupérer. Est-ce que ce devrait être un moyen valable? Ou toute autre idée pour le faire? Comment puis-je sauvegarder efficacement les images afin que mon application swing puisse y accéder. Le nombre d'images n'est pas fixé car les images seront téléchargées par plusieurs utilisateurs sur la même machine en utilisant le même fichier jar.

Répondre

0

Je vous suggère d'avoir un répertoire d'application à partir de laquelle votre application est en train de lire des images et faire de ce répertoire configurable en utilisant Preference-API

+0

Le lien montre 404. –

+0

mis à jour le lien –

+0

@Jigar: Sa solution n'est pas parfaite comme je peux le voir: si l'utilisateur supprime le répertoire. Alors? –

0

Je ne suis pas sûr que les données dynamiques de magasin en pot est une bonne idée. Si vous créez une application locale dynamique, vous pouvez utiliser répertoire de travail. Ou vous pouvez utiliser la connexion http pour travailler avec stockage d'images à distance. Ou vous pouvez utiliser un DB.

Ou vous développer quelque chose comme interface flexible tels que:

public interface ImageProvider { 
    public void storeImage(MyImageClass image, String imageLable); 
    public MyImageClass getImage(String imageLable); 
} 

.

et la mettre en œuvre par les classes tant que votre demande est en cours d'élaboration:

public class ImageJarProvider implements ImageProvider { // jar solution 
    private File jar = null; 
    public ImageJarProvider(File jar) { 
    this.jar = jar; 
    } 
    public void storeImage(MyImageClass image, String imageLable) { 
    // implement jar repack: 
    // use classes JarFile, ZipEntry and ZipOutputStream. 
    // unpack file 
    JarFile jarFile = new JarFile(jar); 
    ZipEntry inputEntry = jarFile.getEntry("path/you/need/to/file"); 
    File outFile = new File("temp.jar"); 
    FileOutputStream zipFileStream = new FileOutputStream(outfile); 
    ZipOutputStream zipOutStream = new ZipOutputStream(new BufferedOutputStream(zipFileStream)); 
    ZipEntry entry = new ZipEntry("filename you pack"); 
    zipOutStream.putNextEntry(entry); 
    //pack all your files and pack new image. 
    //this code just shows how to unpack and pack zip(jar)-archives. 
    BufferedInputStream origin = new BufferedInputStream(new jarFile.getInputStream(inputEntry)); 
    byte data[] = new byte[2048]; 
    int count = 0; 
    while((count = origin.read(data, 0, data.length)) != -1) { 
     zipOutStream.write(data, 0, count); 
    } 
    zipOutStream.close(); 
    origin.close(); 
    } 

    public MyImageClass getImage(String imageLable) { 
    // implement unpack of image 
    ... 
    } 
} 

public class ImageHttpProvider implements ImageProvider { // http solution 
    public ImageHttpProvider(String host, int port) { 
    ... 
    } 

    public void storeImage(MyImageClass image, String imageLable) { 
    // implement image upload 
    ... 
    } 

    public MyImageClass getImage(String imageLable) { 
    // implement HTTP image download 
    ... 
    } 
} 

public class ImageDirProvider implements ImageProvider { // working directory solution 
    public ImageDirProvider(File dir) { 
    ... 
    } 

    public void storeImage(MyImageClass image, String imageLable) { 
    // implement file work 
    ... 
    } 

    public MyImageClass getImage(String imageLable) { 
    // implement file work 
    ... 
    } 
} 

public class ImageDBProvider implements ImageProvider { // DB solution 
    public ImageDBProvider(String jdbcURL, Properties jdbcProperties) { 
    ... 
    } 

    public void storeImage(MyImageClass image, String imageLable) { 
    // implement jdbc clob 
    ... 
    } 

    public MyImageClass getImage(String imageLable) { 
    // implement jdbc clob 
    ... 
    } 
} 

.

Vous pouvez organiser le stockage et la lecture des images comme vous le souhaitez sans modifier le moteur de votre application.

Questions connexes