Accueil > Forum > > > > Swing, dessin sur JPanel
Swing, dessin sur JPanel
mercredi 7 mai 2008 à 13:22:30 |
Swing, dessin sur JPanel

mistere86
|
Salut tout le monde, voila j'ai un probleme sur un projet ou tout du moins je ne sais pas comment arriver a mes fins. J'explique, j'ai des classes modeles : AireLivraison, Activite, Rue, etc. Chaque modele possede des getters et des setters. j'ai un PlanPanel qui étend JPanel. Ce PlanPanel permet de visualiser graphiquement la position des aires et des activités seulement. j'ai un AireLivraisonDialog qui étend JDialog. Ce dialog permet de creer ou modifier une aire de livraison. Alors en fait je voudrai que le dialog creer une AireLivraison et que le PlanPanel ecoute les modeles pour mettre a jour la zone de dessin. Aussi comme ca si je modifie le rayon d'action de l'aire (ce rayon permet de savoir si une activité utilise cette aire) le cercle autour de l'aire (sur la zone de dessin PlanPanel) grandit ou retrecit. Je ne c'est pas trop comment mettre en place ce mecanisme, si vous avez des suggestions, allez-y ! J'ai pas trop le temps la donc jai expliqué vite fait mais ce soir s'il y en qui se sont intéressé je donnerai des précisions.
|
|
mercredi 7 mai 2008 à 14:02:07 |
Re : Swing, dessin sur JPanel

indiana_jules
|
Bonjour, Je te conseille de t'orienter au niveau des Design Pattern, notamment le fabuleux Observer/Observable. Le principe: un objet (observable) va surveiller l'état plusieurs autres objets (observer). Quand l'un d'eux change son état, il émet un signal à l'obersable. Du coup, celui-ci est au courant du changement. Du coup, ton panel devra implémenter observer, où tous tes petites classes graphiques (ayant un objet héritant d'observable) "s'inscriront", et quand une valeur se modifie, elles devront faire un "setChanged();' puis un "notifyObservers()" sur leur objet observable (notifyObservers accept les paramétres supplméentaires). Du coup, ton panel principal sera au courant de toutes modifications (j'ai fait une application de configuration et de gestions d'observations qui utilisent beaucoup ce pattern). Voilà, et bonne continuation (un exemple : [ Lien ]) [#Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises] [#Je ne comprends pas tout, mais je parle de tout : c'est ce qui compte]
|
|
mercredi 7 mai 2008 à 18:02:39 |
Re : Swing, dessin sur JPanel

mistere86
|
Oui je vais me servir du pattern Observer/Observable mais est ce que je dois créer des classes graphiques pour representer mes modeles (que 2 modeles sur 6 sont representé graphiquement) ou alors faire directement les figures avec les donnees de mes modeles.
En gros: 1er solution: public class AireGraphique extends Rectangle2D.Double { private AireLivraison aire; // modele d'aire de livraison private Ellipse2D.Double cercle; // pour visualiser le rayon de l'aire public AireGraphique(AireLivraison aire) { super(aire.getX(), aire.getY(), 10, 10); this.aire = aire; cercle = new Ellipse2D.Double(aire.getX(), aire.getY(), aire.getRayon() * 2, aire.getRayon() * 2); } }
2eme solution: dans le JPanel public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; for(AireLivraison aire : aires) { Ellipse2D.Double rayon2d = new Ellipse2D.Double(aire.getX(), aire.getY(), aire.getRayon() * 2, aire.getRayon() * 2); Rectanle2D.Double base2d = new Rectanle2D.Double(aire.getX(), aire.getY(), 10, 10); } // et les activites aussi mais la, c'est un seul carre. }
Alors qu'est ce que vous en pensez, j'aime assez la seconde.
|
|
mercredi 7 mai 2008 à 18:14:13 |
Re : Swing, dessin sur JPanel

indiana_jules
|
Salut, Personnellement, je préfére la première solution, car elle se rapporche du Design Pattern light model (poids mouche). en effet, ce sont tes classes qui sont censés savoir comment elles se dessinent, et non pas ton panel (imagine que tu veuilles faire un seconde panel, tu devras tout refaire). De plus, d'un point d evue performance, c'est plus intéressant. Du coup, il conviendrait d'avoir dans ton panel une méthode du genre: public void paintComponent(Graphics g) { //Je me dessine ... }
Et la méthode paintComponent de ton JPanel pourrait l'appeler (de ce fait, tu te fiches de savoir comment elles se dessinent car tu délégues cette tâche)
Voili voilà
[#Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises] [#Je ne comprends pas tout, mais je parle de tout : c'est ce qui compte]
|
|
mercredi 7 mai 2008 à 21:55:46 |
Re : Swing, dessin sur JPanel

mistere86
|
Hey, encore moi.
voila jai fait ca: public class AireLivraisonForme implements Observer, Dessinable { private AireLivraison aire; private Rectangle2D.Double base; private Ellipse2D.Double rayon; private int tailleBase; public AireLivraisonForme(AireLivraison aire) { this.aire = aire; this.aire.addObserver(this); this.tailleBase = 10; base = new Rectangle2D.Double(aire.getPosition().getX() - tailleBase / 2, aire.getPosition().getY() - tailleBase / 2, tailleBase, tailleBase); int r = aire.getRayonAction(); rayon = new Ellipse2D.Double(aire.getPosition().getX() - r, aire.getPosition().getY() - r, r * 2, r * 2); }
public void update(Observable o, Object arg) { base.setFrame(aire.getPosition().getX(), aire.getPosition().getY(), 10, 10); int r = aire.getRayonAction(); rayon.setFrame(aire.getPosition().getX() - r, aire.getPosition().getY() - r, r * 2, r * 2); }
public void dessiner(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.setColor(Color.BLUE); g2d.fill(base); g2d.setColor(Color.GRAY); g2d.draw(rayon); }
}
Dessinable est une interface qui fournit une methose dessiner(graphics g). Comme ca dans mon JPanel: List<Dessinable> formes // ... public void paintComponent(Graphics g) { for(Dessinable f : formes) { f.dessiner(g); } }
ca marche mais par contre aurait tu une idee pour que je puisse faire du clicker/deplacer pour mes aires et aussi ce clic droit pour un petit menu (modifier, supprimer). Faudrai que mes formes puisse implementer MouseListener mais comment ?
|
|
jeudi 8 mai 2008 à 09:04:57 |
Re : Swing, dessin sur JPanel

indiana_jules
|
Salut, En ce qui concerne le clic droit sur l'élément pour un petit menu, cela devrait pas être trop dur, il suffit de faire un JPopupMenu un peu comme cela :
public class MaClass extends JPanel ... {
public MaClass() { ...
this.addActionListener(new MouseAdapter() { new mouseClicked(MouseEvent e) { JPopupMenu popup=new JPopupMenu(); popup.add(...); //Ajout des menus items popup.show(e.getComponent(),e.getX(),e.getY()); } } ... }
En revanche pour le déplacement, je dirai que cela se joue plutôt au niveau de ton JPanel principal. Ou alors tu peux essayer que tes classes graphiques utilisent le drag and drop, sahcnat que tes formes seraient en "drag" et ton panel principal en "drop".
Ce qui t'éviterait quelques parts de faire les calculs de déplacement. Un exemple: http://gfx.developpez.com/tutoriel/java/swing/drag/
Voili voilà
[#Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises] [#Je ne comprends pas tout, mais je parle de tout : c'est ce qui compte]
|
|
mardi 13 avril 2010 à 18:43:10 |
Re : Swing, dessin sur JPanel

yabda
|
merci por l'explication  c super
|
|
Cette discussion est classée dans : permet, jpanel, dessin, aire, planpanel
Répondre à ce message
Sujets en rapport avec ce message
Aide vrai débutant ! [ par assoul ]
Bonjour, Voila je rencontre qqes difficultés pour un projet de la fac et j'aimerais avoir qqes explications sur certains points : Je n'arrive pas à
Problème de dessin dans JPanel [ par fantmar ]
bonjours à tous j'ai réaliser un petit jeu qui consiste à tirer une balle par canon avec une vitesse initiale est une angle donnée. j'ai utiliser un J
Disparition de dessin dans un JPanel [ par koalish ]
bien le Bonjour à tous !!!J'ai créé un JPanel avec comme arrière plan une carte de la Belgique et j'ai une méthode qui me permet de cliquer sur cette
Detruire objet JPanel et ce qu'il contient [ par poiuytrez3 ]
Bonjour, J'ai fait un petit logiciel qui permet d'additionner des temps pour la course à pied. Cependant il y a un JPanel (l'espèce de tableau qui per
JScrollPane et JViewport [ par Rescue ]
A la base j'ai un JPanel principal qui contient une grille de petits jpanels images (une platforme de 30 sur 20) et je voudrais le mettre dans un Jsc
format de sortie en java [ par zeriab ]
Bonjour, Dans le cadre d'un projet java ( dessin automatique de graphe) j'ai à définir des format de sortie du mon dessin final afin de l'intégrer dan
Probleme de repaint [ par homer__rules ]
Bonjour tout le monde ! J'ai un petit probleme de repaint Mon appli (JFrame) se decompose en 3 parties : le tout est geré par un BorderLayout J'ai
Help please : repaint() [ par homer__rules ]
Hello ! Quelqu'un pourrai-t-il m'aider sur un sujet que j'ai posté hier ? Je n'ai pas vraiment eu de reponse... Merci d'avance Bonjou
comment rajouter des courbes de bezier sur un JPanel en tant que JComponent? [ par kid80 ]
Salut a tous, je vous serais très reconnaissant de m'aider, je suis sur un projet a l'école et c'est bientot la fin...et je ne suis pas super avancé..
problème de création d'une image [ par jc_romeo ]
BonjourJ'aimerai executer la fonction createImage dans un JPanel mais il me retourne null à chaque foisJ'ai donc pensé à remplacer le JPanel par un JF
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|