IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Affichage d'un JPane dans un JFrame


Sujet :

AWT/Swing Java

  1. #141
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Pas du tout

    Il ne faut utiliser qu'un seul connecteur pour relier 2 ComposantDeplacables.
    sinon cela va être ingérable.
    D'autant plus que ton connecteur est bien pensé : il contient bien le ComposantDeplacable de départ et le ComposantDeplacable d'arrivé. Il ne faut pas changer cela.

    dans la pratique :
    - retires l'objet de la classe ComposantDeplacable
    - au moment où tu initialises la connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(e.getActionCommand().equals("Initier connexion")){
    alors tu crées ton connecteur et tu l'enregistres dans le tableau listecon de ta DropZone
    - au moment où tu finalises la connexion alors tu vas chercher le dernier élément du tableau et tu demandes un repaint de la DropZone
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  2. #142
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    - au moment où tu finalises la connexion alors tu vas chercher le dernier élément du tableau et tu demandes un repaint de la DropZone
    comment je fais cela puisque j'utilise une arraylist

  3. #143
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int indexDeMonDernierConnecteur = listecon.size() -1;
    Connecteur connecteur = listecon.get(indexDeMonDernierConnecteur);
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #144
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    bon là c'est bon sauf que lorsque j'initialise ma connexion cela part toujours du coin supérieur gauche mais lorsque je finalise sa revient a la normale. dans la dropzone voilà mes modifications:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public void ajouterConnexion(Connecteur c){
    		listecon.add(c);
    	}
    	public Connecteur finaliserConnexion(){
    		int indexDeMonDernierConnecteur = listecon.size() -1;
    		Connecteur connecteur = listecon.get(indexDeMonDernierConnecteur);
    		return connecteur;
    	}
    dans le ccomposantDeplacable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		if(e.getActionCommand().equals("Initier Connexion")){
    			con=new Connecteur(d);
    			con.InitierConnexion(this);
    			d.ajouterConnexion(con);
    		}
    		if(e.getActionCommand().equals("Finaliser Connexion")){
    			con=d.finaliserConnexion();
    			con.TerminerConnexion(this);
    			d.repaint();
    		}
    maintenant comment faire pour relier le connecteur au composant pour que lorsqu'on déplace le composant le connecteur se déplace également?

  5. #145
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Si on n'utilise que du dessin, on perd toute possibilité de cliquer sur les composants pour déclencher des évènements pour les déplacements et les lignes de connexion entre les composants.

    On peut, bien sûr y arriver avec du dessin. Cependant, cela nécessite de gérer des tableaux d'objets qui vont contenir les datas des composants et de détecter les clics sur leur représentation.
    Au bout du compte, on aurait re-créé Swing !
    C'est ainsi que pratiquent touts les frameworks de graphs, JGraph le premier.
    Il utilisent quelques composants swing pour des renderers/editors à la JTable, mais pas plus.

    Pour tout ce qui est détection des clics/déplacements/, deux listeners suffisent amplement. D'autant plus si l'on travaille avec l'interface Shape et ses implémentations qui fournissent une méthode contains facile à utiliser.

    En effet, la lourdeur des composants Swing est énorme comparé au peu dont on a besoin pour ce genre de choses, ainsi que leur manque de flexibilité, comment relier un connecteur au dessine, gérer les connecteurs qui se croisent et ainsi de suite.

    Sans parler des misères liées au setBounds/PreferredSize et ainsi de suite.
    Ou alors de pouvoir sélectionner un connecteur/objet se trouvant en dessous d'un autre...

    Et des problèmes de perfs liés au nombres de listeners en place.

    Pour ce genre de choses, bypasser (façon de parler, on utilise toujours les listeners) swing est amplement profitable.

  6. #146
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    @sinok tu réponds pour une application de niveau professionnel.

    Là il s'agit d'aider un étudiant qui a un mal de chien à s'y retrouver dans le code qu'il écrit pour son devoir.
    Donc je tâche de lui donner une réponse qui le fera aller aussi loin que possible.

    Il ne s'agit pas de faire un logiciel de CAO pour électricien.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #147
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    pour l'instant pas besoin de gérer des événements sur les connecteurs car il ne sont là que que pour relier les composants pas plus

  8. #148
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Citation Envoyé par junior222 Voir le message
    maintenant comment faire pour relier le connecteur au composant pour que lorsqu'on déplace le composant le connecteur se déplace également?
    Une piste :
    Quand l'évènement de déplacement du ComposantDeplacable est déclenché, il faut parcourir la liste des connecteurs listecon (qui se trouve dans DropZone)
    Si un connecteur possède le ComposantDeplacable concerné alors il faut faire une mise à jour des coordonnées et déclencher un repaint de DropZone
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #149
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    voilà les modifications apportées au ComposantDeplacable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	public void mouseDragged(MouseEvent e) {
    //.....
    		for(Iterator<Connecteur> it=d.listecon.iterator();it.hasNext();)
    		{
    			Connecteur c=(Connecteur)it.next();
    			if((c==this.con) && (c.c1==this)){
    				c.p1.x=this.x+this.getWidth();
    				c.p1.y=this.y+(this.getHeight()/2);
    				d.repaint();
    			}
    				if((c==this.con) && (c.c2==this)){
    					c.p2.x=this.x;
    					c.p2.y=this.y+(this.getHeight()/2);
    					d.repaint();
    			}
    		}
    	}
    le problème c'est que lorsqu'un composant possède plusieurs liens avec d'autres composant, lorsqu'on le déplace seul la dernière connexion est déplacé et les autres ne se déplacent pas

  10. #150
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    j'aimerais également effectuer une petite simulation tu a des pistes?

  11. #151
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    Pour le deplacements des conecteurs c'est résolu il fallais juste remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	public void mouseDragged(MouseEvent e) {
    //.....
    		for(Iterator<Connecteur> it=d.listecon.iterator();it.hasNext();)
    		{
    			Connecteur c=(Connecteur)it.next();
    			if((c==this.con) && (c.c1==this)){
    				c.p1.x=this.x+this.getWidth();
    				c.p1.y=this.y+(this.getHeight()/2);
    				d.repaint();
    			}
    				if((c==this.con) && (c.c2==this)){
    					c.p2.x=this.x;
    					c.p2.y=this.y+(this.getHeight()/2);
    					d.repaint();
    			}
    		}
    	}
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	public void mouseDragged(MouseEvent e) {
    //.....
    		for(Iterator<Connecteur> it=d.listecon.iterator();it.hasNext();)
    		{
    			Connecteur c=(Connecteur)it.next();
    			if(c.c1==this){
    				c.p1.x=this.x+this.getWidth();
    				c.p1.y=this.y+(this.getHeight()/2);
    				d.repaint();
    			}
    				if(c.c2==this){
    					c.p2.x=this.x;
    					c.p2.y=this.y+(this.getHeight()/2);
    					d.repaint();
    			}
    		}
    	}

  12. #152
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Bien
    tu nous diras quelle note tu auras obtenu ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  13. #153
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    sans problème mais il y a un changement de dernière minute je dois dessiner la carte électrique de mon pays et avec l'optique qu'on a adopté je ne pourrais pas totalement 'en sortir pour les raisons suivantes:
    - il faut un autre connecteur qui permettra de tracer des ligne sur la dropzone sans toutefois relier des composants
    - il faut ajouter un nouveau composant qui auras pour but d'entourer un nœud du réseau en trait interrompu rouge.
    Avec sa je crois j'aurais fini si tu a des pistes je suis tout ouïe

  14. #154
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Déjà pour la carte du pays (Cameroun je crois ...) le plus simple est de scanner un fond de carte et d'en faire une image jpeg.
    après, on fait tout dans paintComponent :
    pour le mettre dans la drop zone, tu utilises la méthode drawImage (attention, il faut exécuter drawImage avant les drawLines sinon l'image va recouvrir les drawLines)

    ensuite pour le rouge c'est avec setColor(Color.red)
    pour les pointillés, vois du côté de setStroke
    pour entourer : drawOval
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  15. #155
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    bon là je crois que tu n'a pas bien compris ma préoccupation je parle d'une carte électrique pas carte comme tu l'entendais donc cette carte contient des générateur des transformateur d'une région reliés entre eux. le but ici est de se servir de cette carte pour redessiner exactement la même carte (réseau) mais dans mon application.
    De plus il y a un composant nommé bus qui doit être agrandit ou rétrécie selon la convenance du dessinateur et le nouveau composant qui doit entourer c'est un rectangle qui lui aussi doit être redimensionné selon la convenance du dessinateur. et pour les lignes elles doivent être placé n'importe où dans le graphes elles n'ont pas besoin de relier 2 composants

  16. #156
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    bon j'ai un peux avancé entre temps j'ai totalement changé de philosophie pour le connecteur. En effet j'ai maintenant une classe connexion et la classe d=connecteur possede une arraylist de connexion. Donc un connecteur est un ensemble de lignes et non une ligne. voilà les modifications:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package monpackage;
     
    import java.awt.Point;
    import javax.swing.JPanel;
     
    public class Connexion extends JPanel{
    	public Point p1;
    	public Point p2;
    	public Connexion(Point p1,Point p2){
    		this.p1=p1;
    		this.p2=p2;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    package monpackage;
     
    import java.awt.Color;
    import java.awt.Point;
    import java.util.ArrayList;
     
    import javax.swing.JPanel;
     
    public class Connecteur extends JPanel{
    public ComposantDeplacable c1;
    public ComposantDeplacable c2;
    public DropZone dz;
    public Connexion connexion;
    public ArrayList<Connexion> con;
    public boolean etatconnexion;
    public Connecteur(DropZone d){
    	dz=d;
    	con=new ArrayList<>();
    	etatconnexion=false;
    }
    public void AjouterConnexion(Connexion c){
    	con.add(c);
    	dz.repaint();
    	System.out.println("ajout d'un composant "+c.p1+" "+c.p2);
    }
    public void FinaliserConnexion(Connexion c){
    	con.add(c);
    	etatconnexion=true;
    	dz.repaint();
    	System.out.println("fin de l'ajout"+c.p1+" "+c.p2);
    }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    package monpackage;
     
    import java.awt.Cursor;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.MenuItem;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.util.ArrayList;
    import java.util.Iterator;
    import javax.swing.JFrame;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
     
    public class ComposantDeplacable extends JPanel implements MouseListener,MouseMotionListener,ActionListener{
    	public Composant composant;
    	public int x,y;
    	public DropZone d;
    	private JPopupMenu menu;
    	private JMenuItem editer;
    	private JMenuItem supprimer;
    	private JMenuItem connexion;
    	private JMenuItem connexion1;
    	private Connecteur con;
    	public BareEtat be;
    	public Editer ed;
    	public String idreseau;
    	private java.awt.event.MouseEvent evt_prec = null;
    	public ComposantDeplacable(Composant c,DropZone dz,BareEtat b,String nom){
    		composant=c;
    		d=dz;
    		setPreferredSize(new Dimension(composant.longueur,composant.largeur));
    		addMouseListener(this);
    		addMouseMotionListener(this);
    		menu=new JPopupMenu();
    		editer=new JMenuItem("Editer");
    		supprimer=new JMenuItem("Supprimer");
    		connexion=new JMenuItem("Initier Connexion");
    		connexion1=new JMenuItem("Finaliser Connexion");
    		menu.add(editer);
    		menu.add(supprimer);
    		menu.add(connexion);
    		menu.add(connexion1);
    		editer.addActionListener(this);
    		supprimer.addActionListener(this);
    		connexion.addActionListener(this);
    		connexion1.addActionListener(this);
    		be=b;
    		ed=new Editer(nom);
    	}
    	public void paintComponent(Graphics g){
    		super.paintComponent(g);					
    		g.drawImage(composant.image, composant.x, composant.y,composant.longueur,composant.largeur,null);
    }
    	@Override
    	public void mouseDragged(MouseEvent e) {
            if (evt_prec == null) {
                evt_prec = e;
                return;
            }
            int dX = e.getX() - evt_prec.getX();
            int dY = e.getY() - evt_prec.getY();
     
            Point loc = new Point(getLocation().x + dX, getLocation().y + dY);
            setLocation(loc);
            this.x=loc.x; this.y=loc.y;
            d.ModifPosition(this);
    		for(Iterator<Connecteur> it=d.listecon.iterator();it.hasNext();)
    		{
    			Connecteur c=(Connecteur)it.next();
    			if(c.c1==this){
    				//c.p1.x=this.x+this.getWidth();
    				//c.p1.y=this.y+(this.getHeight()/2);
    				d.repaint();
    			}
    				if(c.c2==this){
    					//c.p2.x=this.x;
    					//c.p2.y=this.y+(this.getHeight()/2);
    					d.repaint();
    			}
    		}
    	}
    	@Override
    	public void mouseMoved(MouseEvent e) {
     
    	}
    	@Override
    	public void mouseClicked(MouseEvent arg0) {
     
    	}
    	@Override
    	public void mouseEntered(MouseEvent e) {
    		be.BareEtatTexte(this.composant.nom);
    		setCursor(new Cursor(Cursor.HAND_CURSOR));
    	}
    	@Override
    	public void mouseExited(MouseEvent arg0) {
    		be.BareEtatTexte("");
     
    	}
    	@Override
    	public void mousePressed(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		if(e.isPopupTrigger()){
    			menu.show(this, e.getX(), e.getY());
    		}
     
    	}
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		if(e.getActionCommand().equals("Editer")){
    			JFrame f=ed.edition(this.composant.nom);
    			f.setVisible(true);
    		}
    		if(e.getActionCommand().equals("Supprimer")){
    			this.setVisible(false);
    			d.liste.remove(this);
    		}
    		if(e.getActionCommand().equals("Initier Connexion")){
    			con=new Connecteur(d);
    			Point p1=new Point();
    			p1.x=this.x;
    			p1.y=this.y;			
    			Connexion c=new Connexion(p1,p1);
    			con.AjouterConnexion(c);
    			d.ajouterConnexion(con);
    		}
    		if(e.getActionCommand().equals("Finaliser Connexion")){
    			con=new Connecteur(d);
    			Point p1=new Point();
    			p1.x=this.x;
    			p1.y=this.y;			
    			Connexion c=new Connexion(p1,p1);
    			con.FinaliserConnexion(c);
    			//con=d.finaliserConnexion();
    			d.repaint();
    		}
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    package monpackage;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.ArrayList;
    import java.util.Iterator;
     
    import javax.swing.JPanel;
    import javax.swing.TransferHandler;
     
    public class DropZone extends JPanel implements MouseListener{
    	ArrayList<ComposantDeplacable> liste;
    	public BareEtat b;
    	public boolean etat;
    	public String idreseau;
    	public ArrayList<Connecteur> listecon;
    	public Connecteur con;
    	public DropZone(String nom)	{
    		setTransferHandler(new DropTransfertHandler());
    		this.setBackground(Color.white);
    		setLayout(null);
    		liste=new ArrayList<>();
    		idreseau=nom;
    		listecon=new ArrayList<>();
    		con= new Connecteur(this);
    	}
    	public void insert(ComposantDeplacable c){
    		liste.add(c);
    		add(c);
    		c.setBounds(c.x, c.y,c.composant.longueur,c.composant.largeur);
    	}
    	public void ModifPosition(ComposantDeplacable c){
    		c.setBounds(c.x, c.y,c.composant.longueur,c.composant.largeur);
    	}
    	public void ajouterConnexion(Connecteur c){
    		listecon.add(c);
    	}
    	public Connecteur finaliserConnexion(){
    		int indexDeMonDernierConnecteur = listecon.size() -1;
    		Connecteur connecteur = listecon.get(indexDeMonDernierConnecteur);
    		return connecteur;
    	}
    	public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		for(Iterator<Connecteur> it=listecon.iterator();it.hasNext();)
    		{
    			Connecteur c=(Connecteur)it.next();
    			//g.drawLine(c.p1.x, c.p1.y, c.p2.x, c.p2.y);
    			for(Iterator<Connexion> it2=c.con.iterator(); it2.hasNext();){
    				Connexion c1=(Connexion)it2.next();
    				g.drawLine(c1.p1.x,c1.p1.y,c1.p2.x,c1.p2.y);
    				System.out.println("dessin du connecteur"+c1.p1+" "+c1.p2);
    			}
    		}
    	}
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		int indexDeMonDernierConnecteur = listecon.size() -1;
    		Connecteur connecteur = listecon.get(indexDeMonDernierConnecteur);
    		if(connecteur.etatconnexion==false){
    			int index=connecteur.con.size()-1;
    			Connexion con=connecteur.con.get(index);
    			Connexion con2=new Connexion(con.p2, e.getPoint());
    			connecteur.AjouterConnexion(con2);
    		}
    	}
    	@Override
    	public void mouseEntered(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    	@Override
    	public void mouseExited(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    	@Override
    	public void mousePressed(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    	@Override
    	public void mouseReleased(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    }
    mais les traits ne s'affichent pas!

  17. #157
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    problème de connecteur résolu juste des erreurs d'inattention je veux maintenant juste augmenter l’épaisseur des traits. donc je bloc sur le composants rectangle(drawRect je crois) qui va me permettre d'entourer un nœud du réseau car c'est le dessinateur qui dois décider de sa taille.

  18. #158
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    bon j'ai fais des progrès pour la zone de sélection mais le problèmes c'est au niveau des cordonnées de fin qui ne sont pas respectés voilà les modifications:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package monpackage;
     
    import java.awt.Point;
     
    public class Selection {
    Point p1;
    Point p2;
    	public Selection(){
    		p1=new Point();
    		p2=new Point();
    	}
    	public void initialise(Point p){
    		p1=p;
    	}
    	public void finalise(Point p){
    		p2=p;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    package monpackage;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.ArrayList;
    import java.util.Iterator;
     
    import javax.swing.JPanel;
    import javax.swing.TransferHandler;
     
    public class DropZone extends JPanel implements MouseListener{
    	ArrayList<ComposantDeplacable> liste;
    	public BareEtat b;
    	public boolean etat;
    	public String idreseau;
    	public ArrayList<Connecteur> listecon;
    	public Connecteur con;
    	ArrayList<Selection> listSel;
    	public DropZone(String nom)	{
    		setTransferHandler(new DropTransfertHandler());
    		this.setBackground(Color.white);
    		setLayout(null);
    		liste=new ArrayList<>();
    		idreseau=nom;
    		listecon=new ArrayList<>();
    		con= new Connecteur(this);
    		listSel=new ArrayList<>();
    		addMouseListener(this);
    	}
    	public void insert(ComposantDeplacable c){
    		liste.add(c);
    		add(c);
    		c.setBounds(c.x, c.y,c.composant.longueur,c.composant.largeur);
    	}
    	public void ModifPosition(ComposantDeplacable c){
    		c.setBounds(c.x, c.y,c.composant.longueur,c.composant.largeur);
    	}
    	public void ajouterConnexion(Connecteur c){
    		listecon.add(c);
    	}
    	public Connecteur finaliserConnexion(){
    		int indexDeMonDernierConnecteur = listecon.size() -1;
    		Connecteur connecteur = listecon.get(indexDeMonDernierConnecteur);
    		return connecteur;
    	}
    	public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		for(Iterator<Connecteur> it=listecon.iterator();it.hasNext();)
    		{
    			Connecteur c=(Connecteur)it.next();
    			for(Iterator<Connexion> it2=c.con.iterator(); it2.hasNext();){
    				Connexion c1=(Connexion)it2.next();				
    				g.drawLine(c1.p1.x,c1.p1.y,c1.p2.x,c1.p2.y);
    			}
    		}
    		for(Iterator<Selection> it3=listSel.iterator(); it3.hasNext();){
    			Selection s=(Selection)it3.next();
    			g.drawRect(s.p1.x, s.p1.y, s.p2.x, s.p2.y);
    		}
    	}
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		if(e.getClickCount()==2){
    			int indexDeMonDernierConnecteur = listecon.size() -1;
    			Connecteur connecteur = listecon.get(indexDeMonDernierConnecteur);
    			if(connecteur.etatconnexion==false){
    				int index=connecteur.con.size()-1;
    				Connexion con=connecteur.con.get(index);
    				Connexion con2=new Connexion(con.p2, e.getPoint());
    				connecteur.AjouterConnexion(con2);
    			}
    		}
    	}
    	@Override
    	public void mouseEntered(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
    	@Override
    	public void mouseExited(MouseEvent e) {
     
     
    	}
    	@Override
    	public void mousePressed(MouseEvent e) {
    		Selection se=new Selection();
    		se.initialise(e.getPoint());
    		listSel.add(se);
    	}
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		Selection se=listSel.get(listSel.size()-1);
    		se.finalise(e.getPoint());
    		repaint();
    	}
    }
    De plus pour les pointillés j'ai vu qu'on faisais sa avec graphics2D or moi j'utilise graphics comment faire?

  19. #159
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il te suffit de caster les Graphics fournis en paramètre de paintComponent en Graphics2D.

    En effet, les Graphics d'un composant Swing sont systématiquement des Graphics2D.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics2D g2d = (Graphics2D) g;

  20. #160
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    bon j'ai trouvé pour les style des traits maintenant c'est la zone de sélection qui pose problème car les coordonnées ne sont pas respectés sa s'affiche n'importe comment voilà mes modifications:
    dans la dropzone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    	public void paintComponent(Graphics g){
    //....
    		float epaisseur=2;
    			float[] style={10,5};
    			Stroke str2=new BasicStroke(epaisseur,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER,10.2f,style,0);
    			for(Iterator<Selection> it3=listSel.iterator(); it3.hasNext();){
    				Selection s=(Selection)it3.next();
    				g2.setColor(Color.RED);
    				g2.setStroke(str2);
    				g2.drawRect(s.p1.x, s.p1.y, s.p2.x, s.p2.y);
    			}
    }
    //..........
    	@Override
    	public void mousePressed(MouseEvent e) {
    		Selection se=new Selection();
    		se.initialise(e.getPoint());
    		se.finalise(e.getPoint());
    		listSel.add(se);
    	}
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		Selection se=listSel.get(listSel.size()-1);
    		se.finalise(e.getPoint());
    		repaint();
    	}
    	@Override
    	public void mouseDragged(MouseEvent e) {
            if (evt_prec == null) {
                evt_prec = e;
                return;
            }
            int dX = e.getX() - evt_prec.getX();
            int dY = e.getY() - evt_prec.getY();
            Point loc = new Point(getLocation().x + dX, getLocation().y + dY);
    		Selection se=listSel.get(listSel.size()-1);
    		se.finalise(loc);
    		repaint();		
    	}
    De plus y aurais t-il pas un moyen de gérer les éventements sur les trait que je dessine?

+ Répondre à la discussion
Cette discussion est résolue.
Page 8 sur 9 PremièrePremière ... 456789 DernièreDernière

Discussions similaires

  1. Problème d'affichage d'un JPanel dans un JFrame.
    Par Patrick95500 dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 18/09/2014, 13h51
  2. Affichage d'un JLabel dans une JFrame
    Par Christophe39 dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 17/02/2014, 13h41
  3. Affichage de différents JPanel dans une JFrame
    Par PROJECT-AURORA dans le forum Débuter
    Réponses: 13
    Dernier message: 16/11/2013, 11h22
  4. Ajout et affichage d'un JPanel dans une JFrame lorsqu'un évènement se produit
    Par bilou_12 dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 27/03/2012, 20h27
  5. [pdf][jframe] affichage d'un PDF dans un JFrame
    Par r.matha dans le forum Documents
    Réponses: 3
    Dernier message: 06/10/2006, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo