profesionales - java grafica
Bibliotecas para gráficos bonitos en SWT? (11)
Sugiero que pruebes jzy3d , una biblioteca java simple para trazar datos en 3D. Es para java, en AWT, Swing o SWT.
Conozco las siguientes bibliotecas para dibujar gráficos en una aplicación SWT / Eclipse RCP:
- Eclipse BIRT Chart Engine (Enlaces a un artículo sobre cómo usarlo)
- JFreeChart
¿Qué otras bibliotecas hay para dibujar gráficos bonitos con SWT? ¿O gráficos en Java en general? Después de todo, siempre puedes mostrar una imagen ...
También está JGraph, pero no estoy seguro de si eso es solo para gráficos (es decir, nodos y bordes), o si también incluye gráficos.
Aquí hay algo diferente: es muy para incrustar páginas web en vistas SWT. Lo probé recientemente y funciona muy bien. Puedes ver a dónde va esto: hay muchos y bellos componentes gráficos para HTML, podría ser una opción. Solo asegúrese de que el componente esté solo en el lado del cliente (a menos que desee iniciar un servidor).
No he probado Flash, pero estoy bastante seguro de que puede hacerlo funcionar (naturalmente, esto significa que su software requerirá que se instale el complemento Flash).
No he usado BIRT o JGraph, sin embargo, uso JFreeChart en mi aplicación SWT. He encontrado que la mejor manera de usar JFreeChart en SWT es haciendo un compuesto un marco AWT y utilizando la funcionalidad AWT para JFreeChart. La forma de hacerlo es creando un compuesto
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);
Hay varios problemas en cuanto a implementaciones en diferentes plataformas, así como el código SWT es muy pobre (en su defensa, el Sr. Gilbert no conoce bien SWT y está hecho para AWT). Mis dos problemas más importantes son que a medida que los eventos AWT se disparan a través de SWT, se producen algunos eventos erróneos y, debido al ajuste del marco AWT, JFreeChart se vuelve mucho más lento.
@zvikico
La idea de poner el gráfico en una página web probablemente no sea una buena forma de hacerlo. Hay algunos problemas primero: la forma en que Eclipse maneja la integración del navegador web en diferentes plataformas es inconsistente. Además, a partir de mi comprensión de algunos paquetes de gráficos para la web, estos requieren instalación, también muchas empresas, incluidos los servidores proxy de uso de minas y, a veces, esto crea problemas con la navegación web de Eclipse.
También hay gráficos JG de ILOG que lucen bastante completos de funciones ... si puede pagarlos. Aquí hay algunas informaciones adicionales sobre cómo usarlo con eclipse.
JCharts es otra opción. Es similar a JFreeChart pero la documentación es gratuita. No tiene soporte directo para SWT pero siempre puede generar una imagen e incrustarla en un marco SWT.
Los que he usado son JChart2D y JFreeChart. Hice una aplicación de trazador en vivo durante el verano y usé JFreeChart para eso. El tipo que había comenzado el proyecto había usado JChart2D pero descubrí que no tenía suficientes opciones para modificar el aspecto y la sensación del gráfico.
Se supone que JChart2D es muy rápido, de modo que si necesita hacer un trazado en vivo, échele un vistazo, aunque JFreeChart no tuvo problemas para hacer un diagrama varias veces por segundo.
También hay una buena lista de bibliotecas de gráficos en java2s.com
SWTChart da buenos resultados para los gráficos de línea, dispersión, barra y área. La API es directa y hay numerosos ejemplos en el sitio web. Pasé de buscarlo en google a ver mis datos en menos de una hora.
También estaba buscando una biblioteca de gráficos para una aplicación Eclipse RCP, tropecé con la publicación de Caleb aquí y definitivamente puedo recomendar SWTChart ahora mismo. Es mucho más rápido que JFreeChart para mí, además de fácilmente extensible. Si realmente tuviera que quejarme de algo, diría que el javadoc podría ser un poco más detallado, pero esto es solo para decir que todo lo demás es genial.
Es posible que también te guste este
Tiene la capacidad de trazar datos en tiempo real con su propio proveedor de datos.
Después de evaluar varias opciones, decidí usar una biblioteca de JavaScript para mostrar gráficas en mi plugin de Eclipse. Como ya sugirió zvikico, es posible mostrar una página html en un navegador. En la página html puede utilizar una de las bibliotecas de JavaScript para hacer el trazado real. Si usa Chartist, puede guardar la imagen como archivo SVG en el menú contextual.
Algunas bibliotecas de creación de gráficos de JavaScript:
Chartist: http://gionkunz.github.io/chartist-js
D3js: http://d3js.org
Otros marcos de gráficos de JavaScript: https://en.wikipedia.org/wiki/Comparison_of_JavaScript_charting_frameworks
Imagen de ejemplo de Chartist :
Ejemplo de código 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;
}
}
Ejemplo de página 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>
Para que esto funcione, chartist.js y chartist.min.css deben descargarse y colocarse en la misma ubicación que el archivo html. También puede incluirlos desde la web. Vea aquí para otro ejemplo: https://www.snip2code.com/Snippet/233633/Chartist-js-example
Editar
Creé un contenedor Java para D3.js, vea