[java] Questions de debutant...

Questions de debutant... [java] - Programmation

Marsh Posté le 13-02-2002 à 14:55:21    

D'un coté, j'ai un objet Image nommé plateau qui ne demande qu'a etre affiché, de l'autre coté un BorderLayout.CENTER qui ne demande qu'a etre rempli, comment concilier les 2 ?
 
Comment, ensuite, definir des zones dans cette image (qui seront selectionné a la souris)
 
mârci

Reply

Marsh Posté le 13-02-2002 à 14:55:21   

Reply

Marsh Posté le 13-02-2002 à 16:42:40    

up

Reply

Marsh Posté le 13-02-2002 à 17:55:18    

c'est pas aussi simple...Le Layout ne demande pas à être rempli, d'abord, c'est un Component qu'on remplit, le Layout ne fait que dire au Component comment ranger tes éléments graphiques.
 
Pour afficher une image, et rendre des zones 'actives' il va te falloir bosser un peu plus : dessiner l'image sur un objet (un JPanel ou un Canvas voir la doc), et ensuite gérer les évènements de souris : quand tu as un click, tu récupère les coordonnées du pointeur, et tu agis en fonction....
 
Ouala!!
 
(bon, y'a peut être plus simple, mais ça fait une éternité que je suis obligé de me contenter de l'AWT (applet oblige) alors c'est une solution AWT)

Reply

Marsh Posté le 14-02-2002 à 10:13:23    

J'ai avancé un peu : effectivement, je suis passé par un Canvas (et même un objet Graphics...). En gros, et de tete (suis au boulot...) (g Graphics, ip Image, plateau Canvas, principal Container):
 
g.drawImage(ip, 0, 0, null);
plateau.paint(g);
principal.add( plateau, BorderLayout.CENTER);
 
ca compile, mais ca ne s'affiche pas. Est ce un probleme de rafraichissement, ma methode n'est pas bonne ?

Reply

Marsh Posté le 14-02-2002 à 10:29:01    

Effectivement ta méthode n'est pas celle que j'aurais utilisé.
 
Il faut que tu fasses un truc du style suivant (attention ça fait longtemps que j'ai pas pratiqué il peut y avoir des erreurs)
 

Code :
  1. class MonPlateau extends Canvas
  2. {
  3.    public void paint(Graphics g)
  4.    {
  5.       // tu dessines ton images
  6.       g.drawImage(ip, 0, 0, null);
  7.    }
  8. }
  9. Puis tu fais
  10. principal.add(instanceDeMonPlateau,BorderLayout.CENTER);


---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
Reply

Marsh Posté le 14-02-2002 à 10:35:15    

ok merci, j'vais essayé ca ce midi. Mais qu'est ce qui ne va pas dans ma methode ?

Reply

Marsh Posté le 14-02-2002 à 10:47:31    

djoul a écrit a écrit :

ok merci, j'vais essayé ca ce midi. Mais qu'est ce qui ne va pas dans ma methode ?  




 
Lorsque tu appelle la méthode drawimage() de g il va dessinner ton image dans g.
 
Puis lorsque tu appelles la méthode paint() en lui passant g il faut savoir que paint ne fait rien, de plus je suis pas sur que le g que tu lui passe corresponde bien à une écran.
 
Car en fait à chaque fois que la zone d'écran doit être dessiner, ton application ou applet appelle la méthode paint en lui passant un objet Graphics qui correspond à la zone d'écran. Il faut donc redéfinir cette méthode pour dire ce qu'on veut dessiner.
 
Voilà
@+


---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
Reply

Marsh Posté le 14-02-2002 à 11:00:25    

Exact, Archangel!! :) C'est comme ça qu'ont crée des composants complexes en AWT!! :D:D Et mine de rien, l'AWT, même si c'est prise de tête, c'est achtement puissant.

Reply

Marsh Posté le 14-02-2002 à 11:15:17    

question,
 
j'ai une image représentant, par exemple, une skin winamp
(start, stop, pause, next, previous)
 
Quelqu'un peut me donner un lien m'expliquant clairement et facilement comment gérer les events de la souris pour que lorsque l'utilisateur clicke sur une zone de l'image je sache déterminer ou c'est histoire de savoir ce qu'il veut faire?
 
Euh c'est clair ? :)


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 14-02-2002 à 11:19:19    

Bah....le plus simple, à mon sens, pour pas te faire chier, c'est de créer une classe ImageButton (si tu es en AWT, sinon, en Swing, ça existe, mais je me souviens plus le nom), qui fonctionne comme un bouton, et qui met ton image dessus, sans bordures ni rien, comme ça, t'as pas à te faire chier avec des gestions de cooredonnées....
 
J'avais fait ça à un moment en Swing et en AWT, avec aussi des objets Border me permettant de 'coller' des images autour de n'importe quel composant.....Bon, on se fait un peu chier pour découper les images à coups de Gimp ou Photoshop au début, mais le résultat était sympa : l'interface ne laissait apparaîrte aucun élément Swing ou AWT, en dehors des JTable et des JTextArea....
 
'le coup des bordures, je l'ai aussi porté en AWT? mais c un peu plus galère à utiliser)

Reply

Marsh Posté le 14-02-2002 à 11:19:19   

Reply

Marsh Posté le 14-02-2002 à 11:24:37    

gfive, merci pour ta réponse.
 
J'ai déjà utiliser cette méthode pour mon applet mais on a des problèmes sous Linux. Les coordonées sont foireuses et les images ne sont pas du tout correctes (il manque plein de partie).
 
Bref, c'est le caca et je me disais que travailler avec une image serait plus propre. Mais bon clair que je suis pas motivé à jouer avec les coordonées.
 
Sinon j'ai un JSlider dans mon applet et lorsque l'utilisateur essaie de modifier la valeur, JRE se crashe avec un AccessException (sous linux uniquement, no prob sous win)
 
Comprends pas...


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 14-02-2002 à 11:39:08    

Comment tu charges tes images?? Tu utilises un MediaTracker?? Pasque sinon, il arrive qu'il les affiche avant qu'elles ne soient complètement chargées...Sinon, pour le slider....A sait pôs!

Reply

Marsh Posté le 14-02-2002 à 12:16:42    

Bon ca remonte a sacrement longtemps mais tu peut te debrouiller pour afficher l'image quand elle a finie d'etre chargee, en utilisant une bufferisation dans une variable image et ensuite faire un draw de la variable.
Avec ca t'as un moyen de controler si l'image a finit d'etre chargee, mais je sais plus exactement comment(arghh on oublie tout :().

Reply

Marsh Posté le 14-02-2002 à 22:02:31    

Bah, l'objet ImageObserver (enfin, l'interface, plutôt) permet d'avoir des évènements sur les images en train de se charger...Mais ça m'étonne, ton problème : avec le MediaTracker, ça marche nickel, même en téléchargeant les images sur le réseau...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed