Frage

Ich kenne die folgenden Bibliotheken zum Zeichnen von Diagrammen in einer SWT/Eclipse RCP-Anwendung:

Welche anderen Bibliotheken gibt es zum Zeichnen hübscher Diagramme mit SWT?Oder Diagramme in Java im Allgemeinen?Schließlich kann man immer ein Bild anzeigen...

War es hilfreich?

Lösung

Ich habe weder BIRT noch JGraph verwendet, verwende jedoch JFreeChart in meiner SWT-Anwendung.Ich habe herausgefunden, dass der beste Weg, JFreeChart in SWT zu verwenden, darin besteht, ein Komposit zu einem AWT-Rahmen zu machen und die AWT-Funktionalität für JFreeChart zu verwenden.Dies erreichen Sie durch die Erstellung eines Komposits

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);

Es gibt mehrere Probleme in Bezug auf Implementierungen auf verschiedenen Plattformen und der darin enthaltene SWT-Code ist sehr dürftig (zu seiner Verteidigung HerrGilbert kennt SWT nicht gut und es ist für AWT gemacht.Meine beiden größten Probleme sind, dass beim Aufsteigen von AWT-Ereignissen durch SWT einige fehlerhafte Ereignisse ausgelöst werden und JFreeChart durch das Umschließen des AWT-Frames wesentlich langsamer wird.

@zvikico

Die Idee, das Diagramm in eine Webseite einzubauen, ist wahrscheinlich kein guter Weg.Zunächst gibt es einige Probleme: Die Art und Weise, wie Eclipse die Integration des Webbrowsers auf verschiedenen Plattformen handhabt, ist inkonsistent.Soweit ich weiß, sind einige Grafikpakete für das Web serverseitig und erfordern diese Einrichtung. Außerdem verwenden viele Unternehmen, darunter auch meines, Proxyserver, was manchmal zu Problemen beim Surfen im Eclipse-Web führt.

Andere Tipps

SWTChart liefert gute Ergebnisse für Linien-, Streu-, Balken- und Flächendiagramme.Die API ist unkompliziert und es gibt zahlreiche Beispiele auf der Website.Von der Suche bei Google bis zur Anzeige meiner Daten dauerte es weniger als eine Stunde.

SWTCart

Du magst vielleicht Das auch eins

Es bietet die Möglichkeit, Echtzeitdaten mit Ihrem eigenen Datenanbieter zu zeichnen.

enter image description here

Die, die ich verwendet habe, sind JChart2D und JFreeChart.Ich habe im Sommer eine Live-Plotter-Anwendung erstellt und dafür JFreeChart verwendet.Der Typ, der das Projekt gestartet hatte, hatte JChart2D verwendet, aber ich stellte fest, dass es nicht genügend Optionen zum Optimieren des Erscheinungsbilds des Diagramms bietet.

JChart2D soll sehr schnell sein. Wenn Sie also Live-Plots erstellen müssen, schauen Sie es sich an, obwohl JFreeChart keine Probleme hatte, ein paar Mal pro Sekunde einen Plot zu erstellen.

Es gibt auch eine ganze Liste von Diagrammbibliotheken java2s.com

Ich war auch auf der Suche nach einer Charting-Bibliothek für eine Eclipse RCP-App, bin hier über Calebs Beitrag gestolpert und kann SWTChart jetzt selbst auf jeden Fall weiterempfehlen.Für mich ist es viel schneller als JFreeChart und außerdem leicht erweiterbar.Wenn ich mich wirklich über etwas beschweren müsste, würde ich sagen, dass das Javadoc etwas ausführlicher sein könnte, aber das soll nur sagen, dass alles andere großartig ist.

Es gibt auch ILOG JViews-Diagramme Das sieht ziemlich funktionsreich aus … wenn Sie es sich leisten können.Hier Hier finden Sie einige zusätzliche Informationen zur Verwendung mit Eclipse.

Ich empfehle Ihnen, es zu versuchen jzy3d, eine einfache Java-Bibliothek zum Plotten von 3D-Daten.Es ist für Java, auf AWT, Swing oder SWT.

Nachdem ich mehrere Optionen geprüft hatte, entschied ich mich, eine JavaScript-Bibliothek zum Anzeigen von Plots in meinem Eclipse-Plugin zu verwenden.Wie zvikico bereits vorgeschlagen hat, ist es möglich, eine HTML-Seite in einem Browser anzuzeigen.Auf der HTML-Seite können Sie eine der JavaScript-Bibliotheken verwenden, um das eigentliche Plotten durchzuführen.Wenn Sie Chartist verwenden, können Sie das Bild über das Kontextmenü als SVG-Datei speichern.

Einige JavaScript-Diagrammbibliotheken:

Chartist-Beispielbild:

enter image description here

Beispiel für Java-Code:

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;
    }
}

Beispiel einer HTML-Seite:

<!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>

Damit dies funktioniert, müssen chartist.js und chartist.min.css heruntergeladen und am selben Speicherort wie die HTML-Datei abgelegt werden.Sie können sie auch aus dem Internet einbinden.Ein weiteres Beispiel finden Sie hier:https://www.snip2code.com/Snippet/233633/Chartist-js-example

Bearbeiten

Ich habe einen Java-Wrapper für D3.js erstellt, siehe

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

Es gibt auch JGraph, aber ich bin mir nicht sicher, ob das nur für Grafiken gilt (d. h.Knoten und Kanten) oder auch Diagramme.

Hier ist etwas anderes:Es ist sehr einfach, Webseiten in SWT-Ansichten einzubetten.Ich habe es kürzlich ausprobiert und es funktioniert sehr gut.Sie können sehen, wohin das führt:Es gibt viele schöne Diagrammkomponenten für HTML, das könnte eine Option sein.Stellen Sie einfach sicher, dass die Komponente nur clientseitig ist (es sei denn, Sie möchten einen Server starten).

Ich habe Flash nicht getestet, bin mir aber ziemlich sicher, dass Sie es zum Laufen bringen können (das bedeutet natürlich, dass für Ihre Software das Flash-Plug-in installiert sein muss).

JCharts ist eine weitere Option.Es ähnelt JFreeChart, die Dokumentation ist jedoch kostenlos.SWT wird nicht direkt unterstützt, Sie können jedoch jederzeit ein Bild generieren und es in einen SWT-Frame einbetten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top