質問

SWT/Eclipse RCP アプリケーションでチャートを描画するための次のライブラリを知っています。

SWT できれいなチャートを描画するためのライブラリは他にありますか?それとも Java のグラフ全般でしょうか?結局のところ、いつでも画像を表示できます...

役に立ちましたか?

解決

BIRT や JGraph は使用したことがありませんが、SWT アプリケーションでは JFreeChart を使用しています。SWT で JFreeChart を使用する最良の方法は、コンポジットを AWT フレームとして作成し、JFreeChart の AWT 機能を使用することであることがわかりました。これを行う方法は、コンポジットを作成することです。

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 コードが非常に貧弱であるだけでなく、(氏はそれを擁護しています)ギルバートは SWT をよく知りませんが、AWT 用に作られています)。私の 2 つの最大の問題は、AWT イベントが SWT を通じてバブルアップするときにいくつかの誤ったイベントが発生することと、AWT フレームのラップにより JFreeChart が大幅に遅くなることです。

@zvikico

Web ページにグラフを配置するという考えは、おそらく良い方法ではありません。まずいくつかの問題があります。それは、Eclipse が異なるプラットフォーム上で Web ブラウザーの統合を処理する方法が一貫していないことです。また、Web 用のいくつかのグラフ パッケージについての私の理解によると、それらはその設定を必要とするサーバー側であり、また、私を含む多くの企業がプロキシ サーバーを使用しており、これにより Eclipse Web ブラウジングで問題が発生することがあります。

他のヒント

SWTChart は、折れ線グラフ、散布図、棒グラフ、面グラフで良好な結果をもたらします。API は簡単で、Web サイトには多数の例があります。Google で見つけてからデータを表示するまで、1 時間もかかりませんでした。

SWTチャート

よろしければ これ 一つも

独自のデータプロバイダーを使用してリアルタイムデータをプロットする機能があります。

enter image description here

私が使ったことがあるのは、 JChart2D そしてJFreeChart。私は夏の間、ライブ プロッター アプリケーションを作成し、それに JFreeChart を使用しました。プロジェクトを開始した人は JChart2D を使用していましたが、グラフの外観と操作性を調整するための十分なオプションがないことがわかりました。

JChart2D は非常に高速であるとされているため、ライブ プロットを行う必要がある場合は JChart2D を参照してください。ただし、JFreeChart では 1 秒あたり数回プロットを実行しても問題ありませんでした。

チャートライブラリのかなりのリストもあります java2s.com

また、Eclipse RCP アプリ用のグラフ作成ライブラリを探していたところ、ここで Caleb の投稿に出会いました。今では私自身も SWTChart を間違いなくお勧めできます。私にとっては JFreeChart よりもはるかに高速であり、さらに簡単に拡張できます。本当に何かについて文句を言う必要があるとしたら、javadoc がもう少し冗長であるべきだと思いますが、これは単に他の部分がすべて素晴らしいということを言いたいだけです。

もあります ILOG JViews チャート かなり機能が充実しているように見えます…余裕があれば。ここ Eclipse での使用に関する追加情報です。

試してみることをお勧めします jzy3d, 、3D データをプロットするためのシンプルな Java ライブラリ。これは、AWT、Swing、または SWT の Java 用です。

いくつかのオプションを評価した後、Eclipse プラグインでプロットを表示するために JavaScript ライブラリを使用することにしました。zvikico がすでに示唆したように、ブラウザーで HTML ページを表示することは可能です。HTML ページでは、JavaScript ライブラリの 1 つを利用して実際のプロットを行うことができます。Chartist を使用している場合は、コンテキスト メニューから画像を SVG ファイルとして保存できます。

一部の JavaScript グラフ作成ライブラリ:

チャーティスト サンプル画像:

enter image description here

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 ファイルと同じ場所に配置する必要があります。Web からそれらを含めることもできます。別の例については、ここを参照してください。https://www.snip2code.com/Snippet/233633/Chartist-js-example

編集

D3.js の Java ラッパーを作成しました。を参照してください。

https://github.com/stefaneidelloth/javafx-d3

JGraph もありますが、それがグラフ専用かどうかはわかりません (つまり、ノードとエッジ)、またはチャートも実行する場合。

ここでは何かが異なります:SWT ビューに Web ページを埋め込むのは非常に簡単です。最近試してみましたが、とてもうまくいきました。これがどうなるかは次のとおりです。HTML には美しいグラフ作成コンポーネントがたくさんあるので、それを選択することもできます。コンポーネントがクライアント側のみであることを確認してください (サーバーを起動する場合を除く)。

私は Flash をテストしていませんが、動作させることができると確信しています (当然、これは、ソフトウェアに Flash プラグインがインストールされている必要があることを意味します)。

Jチャート は別のオプションです。JFreeChart に似ていますが、ドキュメントは無料です。SWT は直接サポートされていませんが、いつでも画像を生成して SWT フレームに埋め込むことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top