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]
|
|
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 à
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
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
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 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|