cs_mouchimouchi
Messages postés14Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention 4 juin 2008
-
3 avril 2008 à 12:33
cs_mouchimouchi
Messages postés14Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention 4 juin 2008
-
4 avril 2008 à 17:46
Hello,
Autant dire que je ne m'y connais pas trop, genre debutant a fond.
J'essaye d'utiliser une classe ImagePanel ... pour utiliser une image chargée comme un panel.
Et pour le constructeur il faut :
public ImagePanel ( File fileImg , int x , int y , int width , int height )
Donc moi ca fait chier u niveau du file :
J'ai essayer :
File fImg = new File("img/fond.png");
ImagePanel image = new ImagePanel(fImg, 0, 0, 800, 600);
Ca me retourne une erreur de la classe ImagePanel : Fichier Invalide.
Jme suis dit que ca vient de la classe et non elle est bonne, et donc ca viendrais de l'url et donc j'ai tester ca :
String file = "/img/fond.png";
File fImg = new File(getClass().getResource(file).toURI());
ImagePanel image = new ImagePanel(fImg, 0, 0, 800, 600);
Ca ne me fait rien comme erreur sauf lorsque je lance le .jar en ligne de commande, ca rends une Exception a n'y rien comprendre :
Exception in Thread ...java... URI is not Hierachical : et des libreries java.
Bon en esperant que quelqu'un reponde
Merci
a pluss
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 3 avril 2008 à 14:45
Salut:
Tout dépend de l'emplacement des resources (images, ...).
Normalement, lorsque tu utilises la méthode getResource() tu dois placer/mettre la resource en question à auprès de la classe.
C'est à dire: la classe et le dossier des ressources (s'il existe) doivent se situer dans un même niveau.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 3 avril 2008 à 14:56
Salut:
Avec le code présent de ImagePanel tu es dans l'obligation de mettre toutes les images de ton projets dans le package où se localise la classe ImagePanel.
Si tu ne veux pas suivre cette démarche, et associer à chaque interface utilisateur son propre dossier de ressources, tu dois fournir un paramètre supplémentaire au constructeur de la classe ImagePanel de type Class, qui référe à la classe désirant utiliser une image de fond.
cs_mouchimouchi
Messages postés14Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention 4 juin 2008 3 avril 2008 à 16:27
Heuheuheu
Je t'avouerai avoir compris partiellement.
merci quand meme.
Mais si j'ai bien compris il faut que toutes mes images soit dans un dosier bien precis ...
Je voulais utilisai cette classe dans l'optique d'utiliser le FileChooser, pour qu'un utilisateur choisisse son image et qu'elle s'affiche . Aveec un tas d'option propre au panel basic.
si tu a un ptit exemple d'application pour que je puisse voir comment faire
cs_mouchimouchi
Messages postés14Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention 4 juin 2008 3 avril 2008 à 17:08
Bin enfaite ...
il me faut les 2, a partir du dd et aussi dans le jar.
A partir du dd le chemin absolut me suffisé : c:\\moi\\toi\\img.png.
Mais a partir du jar j'ai bô essayé de mettre img/fond.png, et toutes les combinaisons possibles avec ca, ca me met "Can't read file input".
Cette erreur m'est retourner par la classe de DARKSIDIOUS. (tres bonne classe je trouve ).
Voilou
ps : Ombitious peux-tu mieux expliquer ton 2eme poste avec la hierarchis tous ca tous ca ???
Steph115
Messages postés163Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 3 février 2012 3 avril 2008 à 18:15
Bonjour,
Savez vous quels paramètres faut il rajouter dans ces lignes de codes pour utiliser un fichier interne au JAR :
String file = "/img/fond.png";
File fImg = new File(getClass().getResource(file).toURI());
ImagePanel image = new ImagePanel(fImg, 0, 0, 800, 600);
Comme l'a stiplué Ombitious_Developper :
Si tu ne veux pas suivre cette démarche, et associer à chaque interface utilisateur son propre dossier de ressources, tu dois fournir un paramètre supplémentaire au constructeur de la classe ImagePanel de type Class, qui référe à la classe désirant utiliser une image de fond.
Merci encore. ++ Nexus
Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 4 avril 2008 à 09:29
Salut:
Franchement, je n'ai pas jetter un coup oeil sur la classe de DarkSidious, mais je pense qu'avec quelques modifications tu peux obtenir:
public class ImagePanel ... {
public ImagePanel(Class clazz, int x, int y, int width, int height) {
// Code
// Tu changes la méthode "getClass()" par le nouveau paramètre clazz.
File fImg = new File(clazz.getResource(file).toURI());
// Autre code
}
}
Dans la classe désirant avoir un fond:
public class DecoratedFrame extends JFrame {
// Quelque part dans une méthode non statique
ImagePanel imgPanel = new ImagePanel(getClass(), 0, 0,
getWidth(), getHeight());
// ou bien
// ImagePanel imgPanel = new ImagePanel(DecoratedFrame.class,
// 0, 0, getWidth(), getHeight());
}
cs_mouchimouchi
Messages postés14Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention 4 juin 2008 4 avril 2008 à 11:41
Hello,
Maintenant j'obtient : not valid for images created with createImage(producer)
Voici mon code dans la classe principale :
String chemin = "/img/Collines.jpg";
String url = this.getClass().getResource(chemin).toString();
ImageLoader loader = new ImageLoader(url);
Image img = loader.loadImage();
Graphics g = img.getGraphics();
JImagePanel pipi = new JImagePanel(img);
pipi.paintComponent(g);
Lorsque je regarde avec winrar le fichier .jar, je vois bien que le dossier "img" est à la racine.
Alors bon dieu bon dieu pourquoi l'image ne s'affiche pas correctement dans mon panel ????????
Merci pour vos conseil les mecs ( surtout Ombitious )
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 4 avril 2008 à 12:01
Salut:
Est ce que ce message est apparu avec les nouvelles modifucations?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 4 avril 2008 à 13:37
Salut:
La méthode paintComponent est héritée de la classe JPanel.
J'ai fait un coup d'oeil sur la classe JImagePanel.
public Image getImage(Class calzz, String filename) {
try {
InputStream is = calzz.getResourceAsStream(filename);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024* 4];
while (true) {
int n = is.read(buffer);
if (n == -1) {
break;
}
baos.write(buffer, 0, n);
}
baos.close();
return Toolkit.getDefaultToolkit().createImage(baos.toByteArray());
} catch (Throwable t) {
return null;
}
}
Maintenant, utilises le constructeur de JImagePanel qui prend en argument un Image:
public class MyFrame extends JFrame {
// ...
Image image = getImage(MyFrame.class, "img/bg.png");
JImagePanel jip = new JImagePanel(img, ...);
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 4 avril 2008 à 13:38
Salut:
J'ai oublié de mette un petit teste pour savoir si l'image est non null.
N'oublies pas de faire.
Autre chose, le répertoire img/ est situé prés de la classe MyFrame.
cs_mouchimouchi
Messages postés14Date d'inscriptionsamedi 14 octobre 2006StatutMembreDernière intervention 4 juin 2008 4 avril 2008 à 17:46
Bon bon bon,
ça a pour résultat ... rien.
comme pour les autres d'ailleurs il doit y avoir une erreur plus haut je pense.
Il faudrait que j'ai un projet d'exemple. Genre une base de quelqu'un pour qui ça fonctionne.
Parce que là je commence a me poser des question sur mon projet entier.
Ex : j'ai fais afficher l'url d'un fichier interne par :
String chemin = "/img/Collines.jpg";
String url = this.getClass().getResource(chemin).toString();
System.out.printnl(url);
Au début ça m'affichais l'URL dans le fichier .jar, et maintenant ça m'affiche le chemin "normal" sans passer par le .jar.
Pourrais-je vous quémander une base de projet sûr ?