Sau khi đánh giá một số tùy chọn, tôi quyết định sử dụng thư viện JavaScript để hiển thị các ô trong Plugin Eclipse của tôi. Như zvikico đã gợi ý nó có thể hiển thị một trang html trong một trình duyệt. Trong trang html, bạn có thể sử dụng một trong các thư viện JavaScript để thực hiện âm mưu thực tế. Nếu bạn sử dụng Chartist, bạn có thể lưu hình ảnh dưới dạng tệp SVG từ menu ngữ cảnh.
Một số hoạt Javascript thư viện biểu đồ:
người vận động Ví dụ hình ảnh:
Ví dụ java đang:
package org.treez.results.chartist;
import java.net.URL;
import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class WebViewSample extends Application {
private Scene scene;
@Override
public void start(Stage stage) {
// create the scene
stage.setTitle("Web View");
Browser browser = new Browser();
scene = new Scene(browser, 750, 500, Color.web("#666970"));
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
class Browser extends Region {
final WebView browser = new WebView();
final WebEngine webEngine = browser.getEngine();
public Browser() {
//add the web view to the scene
getChildren().add(browser);
//add finished listener
webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
if (newState == Worker.State.SUCCEEDED) {
executeJavaScript();
}
});
// load the web page
URL url = WebViewSample.class.getResource("chartist.html");
String urlPath = url.toExternalForm();
webEngine.load(urlPath);
}
private void executeJavaScript() {
String script = "var chartist = new Chartist.Line(" + "'#chart'," + " " + "{"
+ " labels: [1, 2, 3, 4, 5, 6, 7, 8]," + "series: [" + " [5, 9, 7, 8, 5, 3, 5, 44]" + "]" + "}, " + ""
+ "{" + " low: 0," + " showArea: true" + "}" + "" + ");" + " var get = function(){return chartist};";
webEngine.executeScript(script);
Object resultJs = webEngine.executeScript("get()");
//get line
JSObject line = (JSObject) resultJs;
String getKeys = "{var keys = [];for (var key in this) {keys.push(key);} keys;}";
JSObject linekeys = (JSObject) line.eval(getKeys);
JSObject options = (JSObject) line.eval("this.options");
JSObject optionkeys = (JSObject) options.eval(getKeys);
options.eval("this.showLine=false");
}
@Override
protected void layoutChildren() {
double w = getWidth();
double h = getHeight();
layoutInArea(browser, 0, 0, w, h, 0, HPos.CENTER, VPos.CENTER);
}
@Override
protected double computePrefWidth(double height) {
return 750;
}
@Override
protected double computePrefHeight(double width) {
return 500;
}
}
html trang Ví dụ:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="chartist.min.css">
</head>
<body>
<div class="ct-chart" id="chart"></div>
<script type="text/javascript" src="chartist.js"></script>
</body>
</html>
Để làm việc này, chartist.js và chartist.min.css cần được tải xuống và đặt ở cùng vị trí với tệp html. Bạn cũng có thể đưa chúng từ web.Xem ở đây cho một ví dụ khác: https://www.snip2code.com/Snippet/233633/Chartist-js-example
Sửa
tôi đã tạo một wrapper java cho D3.js, xem
https://github.com/stefaneidelloth/javafx-d3
FYI, JFreeChart đã có tích hợp SWT thực nghiệm. Chúng tôi sử dụng nó thành công trong một ứng dụng sản xuất. –
Thật không may giấy phép LGPL của JFreeChart không tương thích với Giấy phép Công cộng Eclipse (EPL). – Stefan