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
[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE par Audrey
Dans un de mes articles précédents , j'avais parlé des DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et po...
Cliquez pour lire la suite de l'article par Audrey ZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATIONZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATION par ROMELARD Fabrice
Une des nouveautés de la version V 3.0 était l'apparition de l'onglet Social qui ne fonctionnait que si le MarketPlace était activé sur son poste. Cela limitait donc son intérêt, car hors du cadre commercial USA-CANADA, peu de monde trouva...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
éditions PEARSON
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abor...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2 par ROMELARD Fabrice
Avec la dernière génération du lecteur MP3 de Microsoft, le ZUNE HD, Microsoft a publié une nouvelle version du logiciel pour PC. Ainsi, je me suis décidé à installer celle-ci sur mon Tablet PC ACER, comme toujours le logiciel est donc tél...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : ANDROIDRE : ANDROID par angie23
Cliquez pour lire la suite par angie23 EXERCICE EN JAVAEXERCICE EN JAVA par nouna1551
Cliquez pour lire la suite par nouna1551 PARALLELISATIONPARALLELISATION par infogoss
Cliquez pour lire la suite par infogoss
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|