【问题标题】:Is there a way to use d3.js in swt composite有没有办法在 swt 复合中使用 d3.js
【发布时间】:2016-03-03 19:10:17
【问题描述】:

我正在开发一个需要某种数据可视化的 Eclipse 插件。我发现 d3 的可视化非常有用。由于 d3 是一个 javascript 库,因此可以在浏览器中显示图表。但我希望图表显示在 swt 复合材料上。

有没有办法做到这一点...

【问题讨论】:

    标签: javascript java


    【解决方案1】:

    您可以使用javafx-d3 与 JavaFx WebView 中的 d3.js 进行交互(应该可以集成到 SWT 中)。

    我如何运行一个最小的示例:

    首先,按照 github 页面上的说明安装 javafx-d3:

    • 获取源代码
    • 您可以将主文件夹用作 Eclipse 工作区,包括两个项目:
    • 导入两个 Eclipse Maven 项目 javafx-d3 和 javafx-d3-demo
    • 构建 maven 项目
    • 运行演示套件com.github.javafxd3.d3.JavaFxD3DemoSuite
    • 如果您没有启动并运行 javafx-d3,请创建问题单。

    (在 Eclipse 中工作我不得不在途中解决missing 'src/test/java' folder 的问题。)

    接下来我按照tutorialbrowserJavaFxSingleDemo 集成到SWT shell 中。 (我必须手动导入 javafx.embed.swt 包 - 看到这个thread

    public class SwtIntegrationDemo {
    
        private static Scene scene;
        private static JavaFxD3Browser browser;
    
        public static void main(final String[] args) {
    
            final Display display = new Display();
            final Shell shell = new Shell(display);
            shell.setText("JavaFX / SWT Integration");
            shell.setLayout(new FillLayout());
            final FXCanvas canvas = new FXCanvas(shell, SWT.NONE);        
    
            //define d3 content as post loading hook
            final Runnable postLoadingHook = () -> {
                System.out.println("Initial loading of browser is finished");
                //do some d3 stuff
                createD3Example();        };
    
            //create browser
            browser = new JavaFxD3Browser(postLoadingHook, true);
    
            //create the scene
            scene = new Scene(browser, 750, 500, Color.web("#666970"));
            canvas.setScene(scene);
            shell.open();
    
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
            display.dispose();    
        }
    
        private static void createD3Example() {
            // code from JavaFxD3SingleDemo.java
        }
    }
    

    【讨论】:

    • 请提供详细说明如何解决 OP 的问题。
    【解决方案2】:

    您可以使用 SWT 浏览器小部件。默认情况下,它链接到 windows 上的 IE DLL 和 linux 上的 XULrunner DLL。

    【讨论】:

    • 使用 swt 浏览器基本上会使其成为一个基于 Web 的应用程序,这将需要某种 Web 服务器。但我希望它是独立的。
    • 没有。 SWT 浏览器可以从本地文件加载内容。绝对不需要网络服务器。
    • 但我希望在某种框架或面板上进行可视化,以便我可以更好地控制 UI。例如,如果用户单击 UI 上的某些东西,则应在插件中触发 java 方法。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多