2008-08-22 18 views
18

Я знаю следующие библиотеки для рисования графиков в SWT/Eclipse, приложения RCP:Библиотеки для симпатичных графиков в SWT?

Какие другие библиотеки там для рисования симпатичных графиков с SWT? Или диаграммы в Java вообще? В конце концов, вы всегда можете отобразить изображение ...

ответ

11

Я не использовал BIRT или JGraph, однако я использую JFreeChart в своем приложении SWT. Я нашел лучший способ использовать JFreeChart в SWT, создав композитный кадр 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 в нем очень бедных (в его защиту г-н Гилберт не знает SWT хорошо, и это сделано для AWT). Мои две самые большие проблемы: события AWT выходят из строя через SWT, происходят некоторые ошибочные события и из-за обертывания AWT-кадра JFreeChart становится значительно медленнее.

@zvikico

Идея поставить диаграммы на веб-странице, вероятно, не лучший способ пойти. Вначале есть несколько проблем, связанных с тем, что Eclipse поддерживает интеграцию веб-браузера на разных платформах. Также из моего понимания нескольких графических пакетов для Интернета они являются серверной стороной, требующей этой настройки, а также многих компаний, включая мои прокси-серверы, и иногда это создает проблемы с веб-браузером Eclipse.

+0

FYI, JFreeChart попавшей экспериментальной интеграции SWT. Мы успешно используем его в производственном приложении. – 2010-06-17 14:34:44

+0

К сожалению, лицензия LGPL JFreeChart несовместима с Public License Eclipse (EPL). – Stefan 2015-08-17 06:49:08

0

Существует также JGraph, но я не уверен, что это только для графиков (например, узлов и ребер), или если это также диаграммы.

0

Вот что-то другое: это очень важно для встраивания веб-страниц в виде SWT. Я недавно попробовал, и он работает очень хорошо. Вы можете видеть, где это происходит: есть много красивых компонентов для составления диаграмм для HTML, это может быть вариант. Просто убедитесь, что компонент только на стороне клиента (если вы не хотите запускать сервер).

Я не тестировал Flash, но я уверен, что вы можете заставить его работать (естественно, это означает, что ваше программное обеспечение потребует установки Flash-плагина).

1

Существует также ILOG JViews Charts, который выглядит довольно функционально ... если вы можете себе это позволить. Here - это дополнительная информация об использовании его с затмением.

+0

JViews был куплен RogueWave: http://www.roguewave.com/products/visualization/jviews/whats-new – Stefan 2015-08-17 07:31:40

0

JCharts - другой вариант. Он похож на JFreeChart, но документация бесплатна. Он не имеет прямой поддержки SWT, но вы всегда можете генерировать изображение и вставлять его в SWT-кадр.

8

SWTChart дает хорошие результаты для диаграмм линий, разброса, бара и области. API является прямым и есть множество примеров на веб-сайте. Я пошел от поиска в google для просмотра моих данных менее чем за час.

SWTChart

+0

Как SWTChart отправляется с графиком в режиме реального времени? Из того, что я могу сказать, серия данных загружается в диаграмму целиком, и нет способа обновить ее новыми значениями по мере их появления. Думаю, это касается меня только по производительности. – akatkinson 2012-06-13 01:47:51

+0

SWTChart лицензируется по EPL. – Stefan 2015-08-17 06:53:27

+0

Он не поддерживает экспорт svg или png. – Stefan 2015-08-17 07:06:45

2

Один я использовал это JChart2D и JFreeChart. Я использовал приложение живого плоттера летом и использовал JFreeChart для этого.Парень, который начал проект, использовал JChart2D, но я обнаружил, что у него недостаточно вариантов для настройки внешнего вида и восприятия диаграммы.

JChart2D должен быть очень быстрым, поэтому, если вам нужно сделать живое построение, взгляните на него, хотя у JFreeChart не было проблем с выполнением графика несколько раз в секунду.

Там также довольно список графиков библиотек на java2s.com

1

Я предлагаю вам попробовать jzy3d, простой Java библиотека для построения 3D-данных. Это для Java, AWT, Swing или SWT.

5

Вы могли бы this один слишком

Он имеет возможность построить данные в режиме реального времени с вашим собственным поставщиком данных.

enter image description here

2

Я также искал для графиков библиотеки для приложения Eclipse RCP, наткнулся на пост Калеба здесь и могу определенно рекомендовать SWTChart Теперь сам. Это намного быстрее, чем JFreeChart для меня, плюс легко расширяемый. Если бы мне действительно нужно было жаловаться на что-то, я бы сказал, что javadoc может быть немного более подробным, но это просто сказать, что все остальное здорово.

1

После оценки нескольких вариантов я решил использовать библиотеку JavaScript для отображения графиков в моем плагине Eclipse. Как уже указывал zvikico, в браузере можно показать html-страницу. На странице html вы можете использовать одну из библиотек JavaScript для фактического построения графика. Если вы используете 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. Вы также можете включить их из Интернета.Смотрите здесь для другого примера: https://www.snip2code.com/Snippet/233633/Chartist-js-example

Редактировать

Я создал Java оболочку для D3.js см

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

 Смежные вопросы

  • Нет связанных вопросов^_^