문제

나는 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 코드도 매우 열악합니다(변호인 Mr.Gilbert는 SWT를 잘 모르고 AWT용으로 만들어졌습니다.내 가장 큰 두 가지 문제는 AWT 이벤트가 SWT를 통해 버블링되면서 잘못된 이벤트가 발생하고 AWT 프레임 래핑으로 인해 JFreeChart가 상당히 느려진다는 것입니다.

@zvikico

차트를 웹 페이지에 넣는 아이디어는 아마도 좋은 방법이 아닐 것입니다.먼저 Eclipse가 서로 다른 플랫폼에서 웹 브라우저 통합을 처리하는 방식이 일관되지 않는다는 몇 가지 문제가 있습니다.또한 웹용 몇 가지 그래프 패키지에 대한 내 이해에 따르면 해당 설정이 필요한 서버측이며, 나를 포함한 많은 회사에서 프록시 서버를 사용하며 때로는 이로 인해 Eclipse 웹 브라우징에 문제가 발생합니다.

다른 팁

SWTChart는 꺾은선형, 분산형, 막대형 및 영역형 차트에 대해 좋은 결과를 제공합니다.API는 간단하며 웹사이트에 수많은 예제가 있습니다.Google에서 찾은 후 한 시간도 안 되어 데이터를 볼 수 있게 되었습니다.

SWT차트

당신은 좋아할 수도 있습니다 이것 하나도

자체 데이터 공급자를 사용하여 실시간 데이터를 표시하는 기능이 있습니다.

enter image description here

제가 사용해 본 것은 JChart2D 그리고 JFreeChart.나는 여름 동안 라이브 플로터 애플리케이션을 만들었고 이를 위해 JFreeChart를 사용했습니다.프로젝트를 시작한 사람은 JChart2D를 사용했지만 차트 모양과 느낌을 조정할 수 있는 옵션이 충분하지 않다는 것을 알았습니다.

JChart2D는 매우 빠르다고 가정되어 있으므로 라이브 플로팅을 수행해야 하는 경우 JFreeChart는 초당 몇 번씩 플롯을 수행하는 데 아무런 문제가 없었지만 이를 살펴보십시오.

또한 꽤 많은 차트 라이브러리 목록이 있습니다. java2s.com

나는 또한 Eclipse RCP 앱용 차트 라이브러리를 찾고 있었는데 여기 Caleb의 게시물을 우연히 발견했고 이제 SWTChart를 직접 추천할 수 있습니다.저에게는 JFreeChart보다 훨씬 빠르고 확장도 쉽습니다.뭔가에 대해 정말로 불평해야 한다면 javadoc이 좀 더 장황할 수 있다고 말하고 싶습니다. 그러나 이것은 단지 다른 모든 것이 훌륭하다는 것을 말하는 것입니다.

또한 ILOG JViews 차트 꽤 기능이 완벽해 보이는데… 여유가 있다면요.여기 Eclipse와 함께 사용하는 방법에 대한 추가 정보입니다.

나는 당신이 시도하는 것이 좋습니다 jzy3d, 3D 데이터를 플로팅하기 위한 간단한 Java 라이브러리입니다.AWT, Swing 또는 SWT의 Java용입니다.

몇 가지 옵션을 평가한 후 Eclipse 플러그인에 플롯을 표시하기 위해 JavaScript 라이브러리를 사용하기로 결정했습니다.zvikico가 이미 제안했듯이 브라우저에 HTML 페이지를 표시하는 것이 가능합니다.HTML 페이지에서는 JavaScript 라이브러리 중 하나를 활용하여 실제 플로팅을 수행할 수 있습니다.Chartist를 사용하는 경우 상황에 맞는 메뉴에서 이미지를 SVG 파일로 저장할 수 있습니다.

일부 JavaScript 차트 라이브러리:

차티스트 예시 이미지:

enter image description here

예제 자바 코드:

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

편집하다

D3.js용 Java 래퍼를 만들었습니다.

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

JGraph도 있지만 그것이 그래프에만 해당되는지는 확실하지 않습니다(예:노드 및 에지) 또는 차트도 수행하는 경우.

여기에 뭔가 다른 것이 있습니다:SWT 보기에 웹페이지를 삽입하는 것은 매우 중요합니다.나는 최근에 그것을 시도했고 매우 잘 작동합니다.이것이 어디로 가는지 볼 수 있습니다:HTML을 위한 아름다운 차트 작성 구성 요소가 많이 있으므로 옵션이 될 수 있습니다.구성 요소가 클라이언트측에만 있는지 확인하세요(서버를 시작하려는 경우는 제외).

Flash를 테스트해 본 적은 없지만 제대로 작동할 수 있다고 확신합니다(당연히 이는 소프트웨어에 Flash 플러그인을 설치해야 한다는 뜻입니다).

JCharts 또 다른 옵션입니다.JFreeChart와 유사하지만 문서는 무료입니다.SWT를 직접 지원하지는 않지만 언제든지 이미지를 생성하여 SWT 프레임에 포함할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top