【问题标题】:render a graphstream graph into javafx将graphstream图渲染到javafx中
【发布时间】:2020-04-11 04:28:31
【问题描述】:

这个想法是显示嵌入在 Javafx 简单 GUI 中的图形流图。 网上没有太多关于这方面的信息。 graphstream 有一个 github(其中有很多错误,例如在 maven 中找不到 gs-algo)并且代码会产生错误。 我创建了一个带有空控制器和 fxml 文件的最小 JavaFX 项目。应用程序文件如下。第一组线是一个正常的图形流图,它在单独的窗口上显示 ok。接下来的两组试图在 javafx 窗口中显示它。

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);
    }
}

【问题讨论】:

标签: javafx graphstream


【解决方案1】:

您的代码有些混乱。 Graphstream的第2版可以正常使用Javafx,但是在这个版本中,你不能这样做

Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);

因为 Viewer 变成了一个抽象类,你可以看到 here

这意味着您没有使用好的版本的graphstream。如果您想使用 javafx,那么您应该在 2.0-alpha 版本中使用 gs-coregs-algogs-ui-javafx,如 README here 中所述。

然后你可以找到一些例子here来帮助你。

【讨论】:

  • 正确,谢谢。下次我会更仔细地 RTFM :(
【解决方案2】:

重要提示:如果您想使用 Maven 导入所需的库(强烈推荐),您需要先将 jitpack.io 存储库导入 maven。

【讨论】:

  • 请不要引用外部代码(它们往往会过时)
猜你喜欢
  • 2017-12-16
  • 1970-01-01
  • 2017-09-03
  • 2012-10-25
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多