有没有办法在swt复合中使用d3.js

时间:2015-11-30 07:46:55

标签: javascript java

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以使用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的问题。)

接下来,我按照此tutorialbrowser中的JavaFxSingleDemo集成到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
    }
}