【发布时间】:2016-03-03 19:10:17
【问题描述】:
我正在开发一个需要某种数据可视化的 Eclipse 插件。我发现 d3 的可视化非常有用。由于 d3 是一个 javascript 库,因此可以在浏览器中显示图表。但我希望图表显示在 swt 复合材料上。
有没有办法做到这一点...
【问题讨论】:
标签: javascript java
我正在开发一个需要某种数据可视化的 Eclipse 插件。我发现 d3 的可视化非常有用。由于 d3 是一个 javascript 库,因此可以在浏览器中显示图表。但我希望图表显示在 swt 复合材料上。
有没有办法做到这一点...
【问题讨论】:
标签: javascript java
您可以使用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 的问题。)
接下来我按照tutorial 将browser 从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
}
}
【讨论】:
您可以使用 SWT 浏览器小部件。默认情况下,它链接到 windows 上的 IE DLL 和 linux 上的 XULrunner DLL。
【讨论】: