Domanda

So che le seguenti librerie per il disegno di grafici in un SWT/Eclipse RCP applicazione:

Quali altre librerie ci sono per il disegno di grafici graziose con SWT?O grafici in Java in generale?Dopo tutto, si può sempre visualizzare un'immagine...

È stato utile?

Soluzione

Non ho usato BIRT o JGraph, tuttavia io uso JFreeChart nella mia applicazione SWT.Ho trovato il modo migliore per utilizzare JFreeChart in SWT è da fare un composito un AWT telaio e utilizza il AWT funzionalità per JFreeChart.Il modo per farlo è attraverso la creazione di un composito

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

Ci sono diversi problemi in quanto riguarda le implementazioni diverse piattaforme, come pure la SWT il codice è molto scarsa (in sua difesa, il SignorGilbert non sa SWT bene e si è fatto per la AWT).I miei due più grandi problemi sono come AWT eventi bolle attraverso SWT ci sono alcuni eventi errati licenziato e a causa di avvolgere il AWT telaio JFreeChart diventa sostanzialmente più lento.

@zvikico

L'idea di mettere il grafico in una pagina web probabilmente non è un ottimo modo per andare.Ci sono un paio di problemi prima di essere come Eclipse maniglie integrare il browser web su piattaforme diverse è incoerente.Anche la mia comprensione di un paio di pacchetti di grafica per il web sono lato server che richiedono l'installazione, anche molte aziende, tra cui la miniera di utilizzare server proxy e a volte questo crea problemi con l'Eclissi di navigazione web.

Altri suggerimenti

SWTChart dà buoni risultati per linea, scatter, bar e grafici.L'API è dritto in avanti e ci sono numerosi esempi sul sito web.Sono andato da trovare su google per la visualizzazione di dati in meno di un'ora.

SWTChart

Come si potrebbe questo uno di troppo

Si ha la possibilità di tracciare in tempo reale i dati con il proprio provider di dati.

enter image description here

Quello che ho utilizzato sono JChart2D e JFreeChart.Ho fatto un live plotter applicazione durante l'estate e utilizzato JFreeChart per che.Il ragazzo che aveva iniziato il progetto aveva usato JChart2D ma ho scoperto che non ha abbastanza opzioni per modificare il grafico di guardare e sentire.

JChart2D dovrebbe essere molto veloce, quindi se avete bisogno di fare vivere il plotting di dare un'occhiata a esso, anche se JFreeChart non ho avuto alcun problema a fare una trama un paio di volte al secondo.

C'è anche un elenco di creazione di grafici librerie su java2s.com

Stavo anche cercando una raccolta di creazione di grafici per un Eclipse RCP app, inciampato su di Caleb post qui e può sicuramente consigliare SWTChart ora me.È molto più veloce di JFreeChart per me, più facilmente estendibile.Se mi sarei davvero lamentarsi di qualcosa, direi che il javadoc potrebbe essere un po ' più dettagliato, ma questo è solo per dire che tutto il resto è ottimo.

C'è anche ILOG JViews Grafici che sembra abbastanza completo... se te lo puoi permettere.Qui ulteriori informazioni sull'utilizzo con eclipse.

Vi suggerisco di provare jzy3d, una semplice libreria java per la rappresentazione grafica di dati 3d.È per java, su AWT, Swing, SWT.

Dopo evaluationg diverse opzioni, ho deciso di utilizzare una libreria JavaScript per la visualizzazione di grafici in mio Plugin di Eclipse.Come zvikico già suggerito, è possibile visualizzare una pagina html in un browser.Nella pagina html, è possibile utilizzare una delle librerie JavaScript a fare il tracciato.Se si utilizza Chartist è possibile salvare l'immagine come file in formato SVG dal menu di scelta rapida.

Un po ' di JavaScript per la creazione di grafici librerie:

Chartist immagine di Esempio:

enter image description here

Esempio di codice 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;
    }
}

Esempio di pagina 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>

Per ottenere questo lavoro, chartist.js e chartist.min.css ha bisogno di essere scaricato e messo nella stessa posizione del file html.Si potrebbe anche includere dal web.Vedi qui per un altro esempio:https://www.snip2code.com/Snippet/233633/Chartist-js-example

Modifica

Ho creato un wrapper java per D3.js vedere

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

C'è anche JGraph, ma non sono sicuro se è solo per i grafici (es.nodi e bordi), o se non grafici.

Qui c'è qualcosa di diverso:è molto di incorporare le pagine web in SWT vista.Di recente ho provato e funziona molto bene.Si può vedere dove questo sta andando:ci sono un sacco di belle componenti grafici per HTML, potrebbe essere un'opzione.Basta assicurarsi che il componente è solo del lato client (a meno che non si desidera avviare un server).

Non ho mai messo in Flash, ma sono abbastanza sicuro che si può ottenere per il lavoro (naturalmente, questo significa che il software richiede plug-in Flash installato).

JCharts è un'altra opzione.È simile a JFreeChart, ma la documentazione è gratuita.Non ha il supporto diretto per la SWT, ma si può sempre generare un'immagine e inserirlo in un SWT telaio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top