[debutant] image dans un jar

jeremeclip Messages postés 30 Date d'inscription jeudi 2 août 2007 Statut Membre Dernière intervention 19 janvier 2008 - 25 déc. 2007 à 12:53
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 25 déc. 2007 à 19:34
bonjour voici mon probleme. Je viens de faire une petite application
donc dans cette application je doit avoir une image de fond et par
dessu j'ia des bouton tranparent donc tout marche quand je lance
l'application avec eclipse mais dans que je le lance dans un jar
executable impossible d'avoir l'image


voici le code de l'application

il ya peut etre une fautes ou je n'utilise peut etre pas bien une fonstion de java pour inserer une image

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]--> 
 
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
import javax.print.DocFlavor.URL;
import javax.swing.*;
 
 
publicclass Menu {

//Déclaration des boutons et du Panel
JPanel Menu;
JPanel bouton;
JButton Connection;
JButton Enregistrer;
JButton Aide;
JButton Option;
JButton Quitter;
 
Menu()throws IOException {
 
Menu = new JPanel();

//Afecte un gestionnaire de présentation a ce panneau
BorderLayout disposition = new BorderLayout();
Menu.setLayout(disposition);

//Crée les bouton en utilisant le constructeur de la classe
//JButton qui prend en paramètre le libellé du bouton
Connection = new JButton("");
Enregistrer = new JButton("");
Aide = new JButton("");
Option = new JButton("");
Quitter = new JButton("");

JFrame frame = new JFrame("History And Futury");
frame.setContentPane(Menu);

//les different option de la frame
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
//rend la frame visible
frame.setVisible(true);
//affiche l'image
frame.add(new Zone());
//donne les mesure de la Frame
frame.setBounds(500,280,347,457);

Menu.setLayout(null);
//enregistrer mes bouton dans le panneau menu
Menu.add(Connection);
Menu.add(Enregistrer);
Menu.add(Aide);
Menu.add(Option);
Menu.add(Quitter);
//Positionne les bouton a l'endroit indiquer
Connection.setBounds(55, 123, 220, 30);
Enregistrer.setBounds(55, 180, 220, 30);
Aide.setBounds(55, 239, 220, 30);
Option.setBounds(55, 296, 220, 30);
Quitter.setBounds(55, 353, 220, 30);

//rend les boutons invisible a l'oeil mais reste actif
Connection.setContentAreaFilled(false);
Enregistrer.setContentAreaFilled(false);
Aide.setContentAreaFilled(false);
Option.setContentAreaFilled(false);
Quitter.setContentAreaFilled(false);

moteur_Menu moteurCalcul = new moteur_Menu(this);
Connection.addActionListener(moteurCalcul);

}

 
publicstaticvoid main(String[] args)throws IOException {
Menu me = new Menu();
}
 
}
 
class Zone extends JComponent{
private BufferedImage image;
public Zone()throws IOException {

image = ImageIO.read(new File("Menu.png"));
}
public Zone(BufferedImage image){
this.image = image;
}
protectedvoid paintComponent(Graphics surface){
surface.drawImage(image, 0, 0, 340, 425, null);
}

}
 

<!-- END TEMPLATE: bbcode_code -->

voila le code merci de m'aider car si j'arrive pas faire cette peitit
appication je ne pourrias pas continuer le restede ce projet

5 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
25 déc. 2007 à 15:19
Salut:

Utilises la méthode getResourceAsStream() qui est méthode des deux classes Class ou ClassLoader.
0
jeremeclip Messages postés 30 Date d'inscription jeudi 2 août 2007 Statut Membre Dernière intervention 19 janvier 2008
25 déc. 2007 à 15:43
et pour l'utiliser je doit la placer ou dans mon code et je dois supprimer ou quoi?
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
25 déc. 2007 à 16:58
Salut:

Il y a plusieurs façons pour exploiter la méthode getResourceAsStream(), vu que tu utilises des objets de la classe BufferedImage, tu peux procéder ainsi:

/**
 * Cette classe charge une image qui se situe relativement
 * à une classe donnée.
 */
public class JarImageLoader {
    public static BufferedImage getImage(Class cls, String filename) {
       try {
          return ImageIO.read(cls.getResourceAsStream(filename));
       }
       catch (Throwable e) {
          return null;
       }
    }
}

Supposons qu'auprès de la classe Toto il y a une image "image.png":

BufferedImage bi = JarImageLoader.getImage(Toto.class, "image.png");
0
jeremeclip Messages postés 30 Date d'inscription jeudi 2 août 2007 Statut Membre Dernière intervention 19 janvier 2008
25 déc. 2007 à 17:45
si j'ai bien compris je met 

**
 * Cette classe charge une image qui se situe relativement
 * à une classe donnée.
 */
public class JarImageLoader {
    public static BufferedImage getImage(Class cls, String filename) {
       try {
          return ImageIO.read(cls.getResourceAsStream(filename));
       }
       catch (Throwable e) {
          return null;
       }
    }
}

dans une nouvelle page  dans eclipse

et ceci

BufferedImage bi = JarImageLoader.getImage(Toto.class, "image.png");

dans le code qui ets site plus haut

c'est sa ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
25 déc. 2007 à 19:34
Salut:

Notre professeur Mme Najjar disait toujours: "Il faut apprendre les bonnes manières".

Lorsqu'on developpe une application (Java ou autre) il faut bien diviser les différentes unités fonctionnelles de ton application en plusieurs packages.

Dans notre cas, il vaut mieux créer un package pour les classes utilitaire [Helper Classes] qui sont les classes à usage général et qui peuvent être utiliser dans les future projets, c'est dans ce package que tu peux mettre cette nouvelle classe [JarImageLoader].

Puis, chaque fois que tu aura besoin de cette classe tu fais l'appel de la méthode en question.

Bye.
0
Rejoignez-nous