将图形流图渲染到 javafx
render a graphstream graph into javafx
想法是显示嵌入在 Javafx 简单 GUI 中的图形流图。
网上没有太多关于这方面的信息。 graphstream 有一个 github (它有很多错误,比如在 Maven 中找不到 gs-algo)并且代码产生错误。
我用空控制器和 fxml 文件创建了一个最小的 JavaFX 项目。申请文件如下。第一组线是一个正常的图形流图,在单独的 window 上显示正常。接下来的两个小组正试图在 javafx window.
中显示它
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.graphstream.graph.Graph;
import org.graphstream.graph.implementations.SingleGraph;
import org.graphstream.ui.swingViewer.GraphRenderer;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
Graph graph = new SingleGraph("Graph");
graph.addNode("1"); graph.addNode("2"); graph.addNode("3");
graph.addEdge("1-->2","1","2", true);
graph.addEdge("1-->3","1","3", true);
/* These 3 lines show correctly a graph, ON A SEPARATE WINDOW */
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
viewer = graph.display(true);
viewer.enableAutoLayout();
// Those below both do not work. I tried many vestions of gs-ui-javafx but ...
//https://github.com/graphstream/gs-ui-javafx/blob/master/src-test/org/graphstream/ui/viewer_fx/test/AllFxTest.java
FxViewer fxviewer = new FxViewer(graph, FxViewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
FxGraphRenderer renderer = new FxGraphRenderer();
FxDefaultView view = (FxDefaultView) fxviewer.addView(FxViewer.DEFAULT_VIEW_ID, renderer);
/* https://github.com/graphstream/gs-ui-javafx/blob/master/src-test/org/graphstream/ui/viewer_fx/test/AllFxTest.java */
FxViewer v = new FxViewer(graph, FxViewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
v.enableAutoLayout();
FxViewPanel panel = (FxViewPanel)v.addDefaultView(false, new GraphRenderer());
Scene scene2 = new Scene(panel, 800, 600);
primaryStage.setScene(scene2);
}
public static void main(String[] args) {
launch(args);
}
}
您的代码有些混乱。 Graphstream version 2中可以正常使用Javafx,但是在这个版本中,你做不到
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
因为 Viewer 变成了抽象的 class 如您所见 here :
这意味着你没有使用好版本的graphstream。如果你想使用 javafx,那么你应该使用 gs-core, gs-algo and gs-ui-javafx at the 2.0-alpha version as explained in the README here.
然后你可以找一些例子here来帮助你。
重要提示:如果你想使用 Maven 导入所需的库(强烈推荐),你需要先将 jitpack.io 存储库导入 maven。
想法是显示嵌入在 Javafx 简单 GUI 中的图形流图。 网上没有太多关于这方面的信息。 graphstream 有一个 github (它有很多错误,比如在 Maven 中找不到 gs-algo)并且代码产生错误。 我用空控制器和 fxml 文件创建了一个最小的 JavaFX 项目。申请文件如下。第一组线是一个正常的图形流图,在单独的 window 上显示正常。接下来的两个小组正试图在 javafx window.
中显示它import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.graphstream.graph.Graph;
import org.graphstream.graph.implementations.SingleGraph;
import org.graphstream.ui.swingViewer.GraphRenderer;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
Graph graph = new SingleGraph("Graph");
graph.addNode("1"); graph.addNode("2"); graph.addNode("3");
graph.addEdge("1-->2","1","2", true);
graph.addEdge("1-->3","1","3", true);
/* These 3 lines show correctly a graph, ON A SEPARATE WINDOW */
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
viewer = graph.display(true);
viewer.enableAutoLayout();
// Those below both do not work. I tried many vestions of gs-ui-javafx but ...
//https://github.com/graphstream/gs-ui-javafx/blob/master/src-test/org/graphstream/ui/viewer_fx/test/AllFxTest.java
FxViewer fxviewer = new FxViewer(graph, FxViewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
FxGraphRenderer renderer = new FxGraphRenderer();
FxDefaultView view = (FxDefaultView) fxviewer.addView(FxViewer.DEFAULT_VIEW_ID, renderer);
/* https://github.com/graphstream/gs-ui-javafx/blob/master/src-test/org/graphstream/ui/viewer_fx/test/AllFxTest.java */
FxViewer v = new FxViewer(graph, FxViewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
v.enableAutoLayout();
FxViewPanel panel = (FxViewPanel)v.addDefaultView(false, new GraphRenderer());
Scene scene2 = new Scene(panel, 800, 600);
primaryStage.setScene(scene2);
}
public static void main(String[] args) {
launch(args);
}
}
您的代码有些混乱。 Graphstream version 2中可以正常使用Javafx,但是在这个版本中,你做不到
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
因为 Viewer 变成了抽象的 class 如您所见 here :
这意味着你没有使用好版本的graphstream。如果你想使用 javafx,那么你应该使用 gs-core, gs-algo and gs-ui-javafx at the 2.0-alpha version as explained in the README here.
然后你可以找一些例子here来帮助你。
重要提示:如果你想使用 Maven 导入所需的库(强烈推荐),你需要先将 jitpack.io 存储库导入 maven。