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

2D Java Discussion :

créer un lien dynamique avec JGraph


Sujet :

2D Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 7
    Points
    7
    Par défaut créer un lien dynamique avec JGraph
    Salut,je suis entrain de faire une interface graphique qui est en fait un editeur de diagramme d'activités d'UML , j'ai pu dessiner tous les composants du diagramme avec JGraph et maintenant l'utilisateur peux insérer a partir du toolbar tous les composants et autant de formes qu'il veux. Mon problème consiste à créer un lien dynamique entre les cellules (composants) insérés à partir du toolbar . Je veux que le l'utilisateur puisse créer le lien avec la souris comme suit:

    1) clique au milieu de la première forme

    2)drag avec la souris

    3)lache la souris lorsque il atteind la deuxième forme à lier
    Je veux que le lien soit cré avec le déplacement de la souris. Je sais que c'est avec MousseCliked ,mousseDragged et mousseReleased mais j'ai pas pu faire. SVP est ce que quelqu'un puisse m'aider avec un petit exemple.
    C'est trés urgent.
    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    ca m'interesse aussi

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 7
    Points
    7
    Par défaut lien dynamique
    j'ai trouvé la solution, il suffit d'ajouter le code ci dessous:
    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
     class MyMarqueeHandler extends BasicMarqueeHandler {
            protected Point2D start, current;
    protected PortView port, firstPort;
    public boolean isForceMarqueeEvent(MouseEvent e) {
    port = getSourcePortAt(e.getPoint());
    if (port != null && classPanel.graph.isPortsVisible())
    return true;
    return super.isForceMarqueeEvent(e);
    }
            public void mousePressed(MouseEvent e) {
            // If Right Mouse Button
    			if (SwingUtilities.isRightMouseButton(e)) {
    				// Find Cell in Model Coordinates
    				Object cell = classPanel.graph.getFirstCellForLocation(e.getX(), e.getY());
    				// Create PopupMenu for the Cell
    				JPopupMenu menu = createPopupMenu(e.getPoint(), cell);
    				// Display PopupMenu
    				menu.show(classPanel.graph, e.getX(), e.getY());
    				// Else if in ConnectMode and Remembered Port is Valid
    			} else if (port != null && classPanel.graph.isPortsVisible()) {
    				// Remember Start Location
    				start = classPanel.graph.toScreen(port.getLocation());
    				// Remember First Port
    				firstPort = port;
    			} else {
    				// Call Superclass
    				super.mousePressed(e);
    			}
            }
            public void mouseDragged(MouseEvent e) {
    if (start != null) {
    Graphics g = classPanel.graph.getGraphics();
    PortView newPort = getTargetPortAt(e.getPoint());
    if (newPort == null || newPort != port) {
    paintConnector(Color.black, classPanel.graph.getBackground(), g);
    port = newPort;
    if (port != null)
    current = classPanel.graph.toScreen(port.getLocation());
    else
    current = classPanel.graph.snap(e.getPoint());
    paintConnector(classPanel.graph.getBackground(), Color.black, g);
    }
    }
    super.mouseDragged(e);
    }
     
            public void mouseReleased(MouseEvent e) {
    if (e != null && port != null && firstPort != null && firstPort != port) {
    DefaultEdge myEdge = new DefaultEdge();
    int arrow = GraphConstants.ARROW_CLASSIC;
    GraphConstants.setLineEnd(myEdge.getAttributes(), arrow);
    GraphConstants.setEndFill(myEdge.getAttributes(), true);
    classPanel.graph.getGraphLayoutCache().insertEdge(myEdge,
    (DefaultPort)firstPort.getCell(), (DefaultPort)port.getCell());
    e.consume();
    } else {
    classPanel.graph.repaint();
    }
    firstPort = port = null;
    start = current = null;
    super.mouseReleased(e);
    }
     
            public void mouseMoved(MouseEvent e) {
    			// Check Mode and Find Port
    			if (e != null && getSourcePortAt(e.getPoint()) != null
    					&& classPanel.graph.isPortsVisible()) {
    				// Set Cusor on Graph (Automatically Reset)
    				classPanel.graph.setCursor(new Cursor(Cursor.HAND_CURSOR));
    				// Consume Event
    				// Note: This is to signal the BasicGraphUI's
    				// MouseHandle to stop further event processing.
    				e.consume();
    			} else
    				// Call Superclass
    				super.mouseMoved(e);
    		}
     
            protected PortView getSourcePortAt(Point point) {
                //throw new UnsupportedOperationException("Not yet implemented");
                // Disable jumping
    			classPanel.graph.setJumpToDefaultPort(false);
    			PortView result;
    			try {
    				// Find a Port View in Model Coordinates and Remember
    				result = classPanel.graph.getPortViewAt(point.getX(), point.getY());
    			} finally {
    				classPanel.graph.setJumpToDefaultPort(true);
    			}
    			return result;
            }
     
            protected PortView getTargetPortAt(Point point) {
               // throw new UnsupportedOperationException("Not yet implemented");
                return classPanel.graph.getPortViewAt(point.getX(), point.getY());
            }
     
            protected void paintConnector(Color fg, Color bg, Graphics g) {
               // throw new UnsupportedOperationException("Not yet implemented");
                // Set Foreground
    			g.setColor(fg);
    			// Set Xor-Mode Color
    			g.setXORMode(bg);
    			// Highlight the Current Port
    			paintPort(classPanel.graph.getGraphics());
    			// If Valid First Port, Start and Current Point
    			if (firstPort != null && start != null && current != null)
    				// Then Draw A Line From Start to Current Point
    				g.drawLine((int) start.getX(), (int) start.getY(),
    						(int) current.getX(), (int) current.getY());
            }
     
            protected void paintPort(Graphics g) {
                //throw new UnsupportedOperationException("Not yet implemented");
                // If Current Port is Valid
    			if (port != null) {
    				// If Not Floating Port...
    				boolean o = (GraphConstants.getOffset(port.getAllAttributes()) != null);
    				// ...Then use Parent's Bounds
    				Rectangle2D r = (o) ? port.getBounds() : port.getParentView()
    						.getBounds();
    				// Scale from Model to Screen
    				r = classPanel.graph.toScreen((Rectangle2D) r.clone());
    				// Add Space For the Highlight Border
    				r.setFrame(r.getX() - 3, r.getY() - 3, r.getWidth() + 6, r
    						.getHeight() + 6);
    				// Paint Port in Preview (=Highlight) Mode
    				classPanel.graph.getUI().paintCell(g, port, r, true);
    			}
            }
     
     
     
        }
    c'est une classe Inner , il sujet de l'ajouter à l'intérieur de la classe ou on crée le graphe et aussi ajouter cette instruction lors de la creation du graphe
    graph.setMarqueeHandler(new MyMarqueeHandler());

    j'espère que ça vous aide.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Merci pour le code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lien dynamique avec affichage en dessous (suite)
    Par tchoukapi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/07/2006, 19h55
  2. Lien dynamique avec affichage en dessous
    Par tchoukapi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/07/2006, 02h37
  3. Comment créer un lien hypertexte avec une liaison OLE Excel ?
    Par vieuxsinge dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 08/12/2005, 17h16
  4. [DisplayTag] Créer un lien dynamique avec javascript
    Par babylone7 dans le forum Taglibs
    Réponses: 3
    Dernier message: 20/04/2005, 10h23
  5. [DisplayTag] Comment créer un lien dynamique
    Par tscoops dans le forum Taglibs
    Réponses: 3
    Dernier message: 17/02/2005, 09h53

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