[jPanel]graphique ... c la misère...

graphique ... c la misère... [jPanel] - Java - Programmation

Marsh Posté le 25-03-2003 à 22:08:14    

Bon c un peu compliké ce que je vais dire donc je vais essayer de pas m'emmeler les pinceaux...
 
j'ai un jPanel dans lekel se trouvent des objets graphiques (carrés en couleur enfin peu importe...)
 
un autre qui se construit en fonction de parametres
 
celui ci c'est une ligne de taille fixe sur l'ecran mais qui represente une route  dont on peut faire varier la longueur
en bref quand j'ai renseigné le parametre je veux que le jPanel se mette a jour avec les valeurs de debut et de fin de la "route" : exemple si je mets une longueur de route de 500
 
j'aurais :  
----------------------------------------
|       |       |      |       |       |
0      100     200    300     400     500
 
avec 100 j'aurais :  
----------------------------------------
|       |       |      |       |       |
0       10     20      30     40      50   metres
 
 
+ encore d'autres composants (rectangles) qui viennent se greffer a la "route"  a un rang  precis de la route en fait a un indice (modelisée par un tablo[] de char)
 
quand je veux reinitialiser mon jPanel je  veux en fait enlever mes rectangles ainsi que les labels caracterisant la longueur de la route... il faut utiliser la methode repaint()?
 
de plus je n'ai pas torp d'idée en ce qui concerne l'aspect"dynamique" de la creation de la ligne en fonction du paramètre donné...
 
enfin bref je comprendrais si vs ne repondez pas car moi meme g du mal mais bon ca me fait du bien d'essayer de l'expliker comme ca je comprends mieux
 

Reply

Marsh Posté le 25-03-2003 à 22:08:14   

Reply

Marsh Posté le 26-03-2003 à 09:31:01    


----------------------------------------
|       |       |      |       |       |
0      100     200    300     400     500
 
avec 100 j'aurais :  
----------------------------------------
|       |       |      |       |       |
0       10     20      30     40      50   metres

 
(en fixed c'est mieux), c'est peut-etre plutot 50 que 100 dans le 2eme non ?
 
Bon peu importe, moi j'ai a peu près rien compris, mais si ca peut t'aider :
 http://forum.hardware.fr/forum2.ph [...] subcat=390


---------------
get amaroK plugin
Reply

Marsh Posté le 26-03-2003 à 19:52:46    

c sympa de me donner un lien vers un topic ke j'ai crée !!!
 
 :lol:

Reply

Marsh Posté le 26-03-2003 à 23:02:31    

le repaint() sert juste à forcer le panel à se redessiner plus redessiner tous les components qu'il contient. Pour enlever tout ce qu'il contient tu fais un removeAll()  (il y a moyen de le faire compo par compo avec remove(Component) )
 
Pour dessiner ta route, je dirais que tu dois redéfinir la méthode paint du JPanel pour qu'elle fasse le dessin en fonction des paramètres. Tu mes donc ces paramètres en variables d'instance. Dès que l'utilisateur change un paramètre, tu fais un repaint() et le JPanel s'adapte automatiquement. Mais ca, ca marche pour dessiner juste la ligne dans ton JPanel, tu as aussi des objets à placer dessus ?


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 27-03-2003 à 00:34:08    

bon en fait quand je clique sur le bouton je recupere la position de l'objet a créer dans un textfield puis via un getGraphics sur mon jPanel je dessine trankilou mon objet
 
 
et pour tout virer j'ai juste a faire un repaint et ca me laisse juste la route  et ca me vire touts les objets qui sont crées par l'ultisateurs donc qui peuvent changer de place...
 
maintenant je me mets a l'animation... ca va chauffer
 

Reply

Marsh Posté le 27-03-2003 à 00:39:49    

mmh, attention, la méthod repaint est appelée aussi par le système.
Donc les objets créés par l'utilisateur seront effacés si la méthode est appelée sans que ce soit toi qui le veuille, c'est ca que tu veux faire ? (test quand tu resize la fenêtre ou que tu la minimise et maximise)


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 27-03-2003 à 01:59:58    

a bon elle est appelée quand par le systeme?
 
je croyais qu'on la controlait :??:  
 
 
en tout cas ca marche j'ai un bouton reinitialiser qui m'enleve mes objets graphiques par contre ils sont toujours presents au niveau objet donc comment je fais pour les detruire "a la main"?
j'ai entendu parler d'une methode destroy  

Code :
  1. if(s!=null)
  2. s.destroy();


 
mais ca marche pas...

Reply

Marsh Posté le 27-03-2003 à 02:03:53    

argh effectivement tu as raison  quand je maximise et que je minimise ca me nike mes objets graphiques!!!!
 
 
alalala ca m'embete ca....euh comment on fait pour empecher la minimisation (je sais c mal :ange: )
 
mais sinon deltaden comment faire pour ajouter des graphiques a un jPanel sans passer par sa methode initiale (paintComponent)
 
stp aide moi!!!

Reply

Marsh Posté le 27-03-2003 à 02:24:16    

spitagor a écrit :


alalala ca m'embete ca....euh comment on fait pour empecher la minimisation (je sais c mal :ange: )


ce serait trop facile...
en plus repaint() est même appelée quand tu passe une autre fenêtre devant celle de ton programme...

spitagor a écrit :


mais sinon deltaden comment faire pour ajouter des graphiques a un jPanel sans passer par sa methode initiale (paintComponent)


pour pouvoir dessiner "à la volée", tu fais jpanel.getGraphics() et ca te renvoit l'objet Graphics sur lequel dessiner.
 
et pour la destruction des objets, c'est pas nécessaire; une fois que des objets ne sont plus pointés par une variable (=>ils sont devenus inaccessibles), il y a le Garbage Collector qui s'occupe de le détruire et libérer la mémoire.
 
mais pour le reste, explique un peu plus ce que tu fais, avec les données de l'utilisateur, tu rajoute des objets Rectangle, Line2D... ou tu fais juste un graphic.drawRect(...) ?  
Et l'utilisateur, il peut rajouter autant d'objets qu'il veut ou seulement un nombre limité ?


Message édité par deltaden le 27-03-2003 à 02:37:51

---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 27-03-2003 à 07:52:18    

il peut en rajouter 4 au maximum et je fais un simple drawRect +un drawLine ainsi qu'un drawString c tout
 
 
 
et puis pour la destruction je sais qu'il y a le garbage collector  mais je voulais le supprimer manuellement
 
 
et puis j'ai un pb :
 
quand l'utilisateur clik sur un bouton ca me créee un nouvel objet Machine()
 
 

Code :
  1. btajoutermachineactionperformed(...)
  2. {
  3.                Machine m=new Machine(tabcaralea,pos);
  4.            
  5.                nbmachine++;
  6. //dessin de la machine  
  7. drawRect, draw line etc...
  8. }


 
 
mais aprres sacahnt que je veux acceder a une machine specifique je fais comment?Dans ma classe machine ya un attribut numéro.
 
comment acceder a la machine 1, 2 3 ou 4?

Reply

Marsh Posté le 27-03-2003 à 07:52:18   

Reply

Marsh Posté le 27-03-2003 à 10:32:11    

pour supprimer manuellement, il n'y a pas vraiment moyen,  
en java, c'est le GC qui s'en occupe.
 
Bon, apparement, la position où dessiner ta machine est enregistrée dans la machine non?
Le plus simple est de mettre tes machines dans un tableau défini en variable d'instance.  Tu as donc:

Code :
  1. Machine[] tabMachine = new Machine[4];
  2. boolean drawMachine;
  3. ....
  4. btAjouterMachineActionPerformed(...)
  5. {
  6. tabMachine[nbMachine]=new Machine(tabcaralea,pos);         
  7. nbMachine++;
  8. repaint();
  9. }
  10. ...
  11. paint(Graphics g){
  12. //tracage route:
  13. drawLine()
  14. ...
  15. //tracage machine
  16. if (drawMachine)
  17. for (int i =0; i < nbMachine; i++)
  18. {
  19. drawLine(...
  20. }
  21. }


et tu modifie le drawMachine en fonction de ce que tu veux faire

Reply

Sujets relatifs:

Leave a Replay

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