GraphStream Users

Archives de la liste Aide

Re: integrating viewer and communication between viewer and graph

Chronologique Discussions 
  • From: guilhelm savin <guilhelm.savin AT>
  • To: Gergely Zahoransky-Kohalmi <gzahoransky-kohalmi AT>
  • Cc: "graphstream-users AT" <graphstream-users AT>
  • Subject: Re: integrating viewer and communication between viewer and graph
  • Date: Fri, 13 Dec 2013 12:23:33 +0100

No pump, no events. For proxy between two threads, you need to pump.
It works fine.

        while (loop) {
            try {

                for (int i = 0; i < graph.getNodeCount(); i++) {
                    if (graph.getNode(i).hasAttribute("ui.selected")) {
                        System.out.printf("node[%d] \"%s\" is selected\n", i,
            } catch (InterruptedException e) {


2013/12/13 Gergely Zahoransky-Kohalmi <gzahoransky-kohalmi AT>
Dear Guilhelm,

Thank you for your quick answer!

I tried to add the ViewerPipe but I still could not get it working the way I want. I am sure, however, that there are some confusion on my end.

To start with: does the class that implements ViewerListener need to be the main class (i.e. the class of the program, like Clicks () in the example)?

When I tried to adopt the example to my class (which is not the "main" class) then I things got hung up when I included the loop part (with the "fromViewer.pump()" from the example). If I did not include the pump, only called it when I thought I needed it, then I got an error. This error was related to creating nodes that already existed. This was weird, because only change that happened in the view was that I selected some nodes. Then I wanted to list the nodeIDs of the selected nodes by a function (which called invoked the pump) and this is how I got that error.

I also tried not to define a ViewerListener subclass but I kept everything else (i.e. I set up a VieverPipe, added the graph as sink to it, included the lop), but in that case nothing really happens. But there's no hung up, meaning that everything is visualized, and I did not get that weird error message despite the pump was invoked...

I am not sure if this is related or not, but I defined a MouseManager that basically inactivates the click on sprites by checking for a specific attribute that I add to sprites.

I wonder if you have any suggestion.



>>> guilhelm savin  12/12/13 2:26 PM >>>
Dear Gergely,

1. You need a ViewerPipe created by the viewer and connected to the
original graph to retrieve ui events. Click() example does this connection.

2. Viewer is not a ui component, it contains all the element linked to this
ui. However, View is a JPanel. So, if you are using the "display()" method,
just call "viewer.getDefaultView();" to get this JPanel. Or, create a
viewer, using "Viewer(graph,
Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);", then call the
"addDefaultView(openInAFrame);" method of this viewer to get the JPanel.



2013/12/12 Gergely Zahoransky-Kohalmi

> Dear List,
> I'd like to ask for your help in the following issues.
> My goal is to have a Swing integrated View of the graph (preferably as a
> separate thread from the main thread)
> in which changes made to nodes are propagated back to the underlying graph.
> Here is what I tried:
> 1. I initiated my viewer as viewer = graph.display() , and it works fine
> as far as selecting nodes
> (they change color, I can select and deselect them with right mouse click
> or by dragging mouse).
> However, when a node (actually the representation of the node in the
> viewer) is selected, i.e. the element
> gets the attribute ui.selected, when I loop through the nodes of the
> graph, none of the nodes has the attribute
> ui.selected. I think this is due to the lack of the backwards
> communication from the viewer to the graph.
> With other word, no matter what change is made in the viewer, it's not
> reflected in the graph itself.
> As far as I understand, this is the way it should work, according to the
> tutorial on Views.
> So how can I change this? Or how can I access nodes of the graph that have
> a ui.selected attribute in the view?
> 2. I tried the Click() example in the tutorial, and it worked fine. So how
> can I integrate this as a separate
> GUI thread in a Swing GUI application? The Click() example creates the
> view via graph.display() and
> not via "Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);".
> I think the conflict here is that integration into Swing requires a JPanel
> class (like the View is a
> subclass of JPanel), but the synchronized viewer-graph class is not a
> JPanel subclass.
> Any help would be greatly appreciated! Thanks a lot!
> Best,
> Gergely

Guilhelm Savin
PhD Student of Computer Science
LITIS, University of Le Havre

Guilhelm Savin
PhD Student of Computer Science

Archives gérées par MHonArc 2.6.16.

Top of page