Bonjour,
Ayant codé ma propre class MouseManager, je souhaite reproduire le
comportement de la class ViewerListener (je souhaite avoir un thread graphique
qui gère les évènements utilisateur, et un thread de calcul ).
Ainsi, lorsqu'il y a un click sur un noeud, je lui attribue un état "noeud
sélectionné" (="ui.selected"). L'état du noeud est donc modifié dans le
GraphicGraph du viewer. Je souhaite synchroniser mon Graph (sur lequel je fais
tous mes calculs) avec ce GraphicGraph modifié. Cependant, je n'y arrive pas.
Par exemple, dans mon GraphicGraph, si j'ajoute un attribut lors d'un click au
noeud correspondant, je souhaite retrouvé ce même attribut dans mon Graph de
calcul (GraphicGraph et Graph étant le même graph). Je souhaite donc que les
modifications faite sur l'un, se reproduise sur l'autre. Pour cela j'ai donc
ajouté un sink. Cependant tout cela ne semble pas fonctionner. Je sollicite
donc votre aide.
Le code sera surement plus parlant, je pense. En esperant m'etre fait
comprendre.
Merci d'avoir pris le temps de repondre.
------------------------------------------------------ CODE
-------------------------------------------------------
Ma class MouseManager :
{
public class ProperMouseManager implements MouseManager
{
private View a_view;
private GraphicGraph a_g;
public void init(GraphicGraph g, View view)
{
this.a_view = view;
this.a_g = g;
a_view.addMouseListener(this);
a_view.addMouseMotionListener(this);
}
public void release()
{
a_view.removeMouseListener(this);
a_view.removeMouseMotionListener(this);
}
public void mousePressed(MouseEvent e)
{
if(e.getButton() == MouseEvent.BUTTON1){
GraphicElement element = a_view.findNodeOrSpriteAt(e.getX(),
e.getY());
if(element != null){
a_g.addAttribute("ui.changed", element.getId());
if (element.hasAttribute("ui.selected"))
element.removeAttribute("ui.selected");
else
element.addAttribute("ui.selected");
}
}
}
}
}
Contenu de ma fonction main :
{
Graph g; //Graph quelconque
Viewer viewer = new Viewer(g,
Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
View view = viewer.addDefaultView(false);
view.setShortcutManager(null);
view.setMouseManager(new ProperMouseManager());
JFrame fenetre = new JFrame();
fenetre.add(view);
fenetre.setVisible(true);
ViewerPipe fromViewer = viewer.newViewerPipe();
fromViewer.addSink(g);
while(!g.hasAttribute("ui.viewClosed")){
fromViewer.pump();
if (g.hasAttribute("ui.changed")) {
Node changedNode = g.getNode((String)
g.getAttribute("ui.changed"));
System.out.println(changedNode.getAttribute("ui.selected"));
g.removeAttribute("ui.changed");
}
}
viewer.close();
}
Archives gérées par MHonArc 2.6.16.