我知道以下用于在SWT / Eclipse RCP应用程序中绘制图表的库:
还有哪些其他库可以用SWT绘制漂亮的图表?或者Java中的图表一般?毕竟,您始终可以显示图像......
答案 0 :(得分:11)
我没有使用过BIRT或JGraph,但是我在SWT应用程序中使用了JFreeChart。我发现在SWT中使用JFreeChart的最佳方法是将复合体设为AWT框架并使用AWT功能进行JFreeChart。这样做的方法是创建一个复合
Composite comp = new Composite(parent, SWT.NONE | SWT.EMBEDDED);
Frame frame = SWT_AWT.new_Frame(comp);
JFreeChart chart = createChart();
ChartPanel chartPanel = new ChartPanel(chart);
frame.add(chartPanel);
关于跨不同平台的实现存在几个问题,并且其中的SWT代码非常差(在其辩护中,Gilbert先生不熟悉SWT并且它是针对AWT制作的)。我的两个最大的问题是当AWT事件通过SWT冒泡时,有一些错误事件被触发,并且由于包裹AWT帧,JFreeChart变得非常慢。
@zvikico
将图表放入网页的想法可能不是一个好方法。首先,Eclipse处理在不同平台上集成Web浏览器的方式存在一些问题是不一致的。另外,根据我对网络的一些图形包的理解,他们是需要设置的服务器端,也包括我的许多公司使用代理服务器,有时这会产生Eclipse网页浏览的问题。
答案 1 :(得分:8)
SWTChart为线条,散点图,条形图和面积图提供了良好的结果。 API很简单,网站上有很多例子。我在不到一个小时的时间内从谷歌上找到它来查看我的数据。
答案 2 :(得分:5)
答案 3 :(得分:2)
我使用过的是JChart2D和JFreeChart。我在夏天做了一个真实的绘图仪应用程序并使用了JFreeChart。启动该项目的人使用过JChart2D,但我发现它没有足够的选项来调整图表的外观和感觉。
JChart2D应该非常快,所以如果你需要做现场绘图看看它,虽然JFreeChart没有任何问题每秒做一次情节。
上还列出了一系列图表库答案 4 :(得分:2)
我也在寻找Eclipse RCP应用程序的图表库,在这里偶然发现了Caleb的帖子,现在我自己也可以推荐SWTChart。对我来说,它比JFreeChart快得多,而且易于扩展。如果我真的不得不抱怨某事,我会说javadoc可能会更冗长,但这只是说其他一切都很棒。
答案 5 :(得分:1)
还有ILOG JViews Charts看起来功能齐全......如果你负担得起的话。 Here是与eclipse一起使用它的一些额外信息。
答案 6 :(得分:1)
我建议你试试jzy3d,一个用于绘制3d数据的简单java库。它适用于java,AWT,Swing或SWT。
答案 7 :(得分:1)
在评估了几个选项后,我决定使用JavaScript库在Eclipse插件中显示绘图。由于zvikico已经建议可以在浏览器中显示html页面。在html页面中,您可以使用其中一个JavaScript库来进行实际绘图。如果使用Chartist,则可以从上下文菜单中将图像另存为SVG文件。
一些JavaScript图表库:
D3js:http://d3js.org
进一步的JavaScript图表框架:https://en.wikipedia.org/wiki/Comparison_of_JavaScript_charting_frameworks
Chartist示例图片:
示例java代码:
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页面:
<!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>
为了使这个工作,需要下载chartist.js和chartist.min.css并将其放在与html文件相同的位置。您也可以从网络中添加它们。请看这里的另一个例子: https://www.snip2code.com/Snippet/233633/Chartist-js-example
修改强>
我为D3.js创建了一个java包装器,参见
答案 8 :(得分:0)
还有JGraph,但我不确定这是否仅适用于图形(即节点和边缘),或者它是否也是图表。
答案 9 :(得分:0)
这里有一些不同之处:它非常适合在SWT视图中嵌入网页。我最近尝试过,它运作良好。你可以看到它的发展方向:HTML有很多漂亮的图表组件,它可以是一个选项。只需确保该组件仅在客户端(除非您要启动服务器)。
我没有测试过Flash,但我很确定你可以让它工作(当然,这意味着你的软件需要安装Flash插件)。
答案 10 :(得分:0)
JCharts是另一种选择。它与JFreeChart类似,但文档是免费的。它不直接支持SWT,但您始终可以生成图像并将其嵌入SWT框架中。