مكتبات للرسوم البيانية جميلة في سبحانه وتعالى؟[مغلق]
سؤال
أعرف المكتبات التالية لرسم المخططات في تطبيق SWT/Eclipse RCP:
- محرك الرسم البياني Eclipse BIRT (رابط لمقال عن كيفية استخدامه)
- JFreeChart
ما هي المكتبات الأخرى المتوفرة لرسم مخططات جميلة باستخدام SWT؟أو الرسوم البيانية في جافا بشكل عام؟بعد كل شيء، يمكنك دائمًا عرض الصورة...
المحلول
لم أستخدم 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.
نصائح أخرى
يوفر SWTChart نتائج جيدة للمخططات الخطية والمبعثرة والشريطية والمساحية.واجهة برمجة التطبيقات (API) واضحة ومباشرة وهناك العديد من الأمثلة على الموقع.لقد انتقلت من العثور عليه على Google إلى عرض بياناتي في أقل من ساعة.
قد ترغب هذا واحد ايضا
لديه القدرة على رسم البيانات في الوقت الحقيقي مع مزود البيانات الخاص بك.
الذي استخدمته هو JChart2D و جيفري تشارت.لقد قمت بتنفيذ تطبيق راسمة مباشر خلال فصل الصيف واستخدمت JFreeChart لذلك.استخدم الرجل الذي بدأ المشروع JChart2D ولكني وجدت أنه لا يحتوي على خيارات كافية لتعديل شكل المخطط ومظهره.
من المفترض أن يكون JChart2D سريعًا جدًا، لذا إذا كنت بحاجة إلى إجراء تخطيط مباشر، فقم بإلقاء نظرة عليه، على الرغم من أن JFreeChart لم يواجه أي مشاكل في إجراء مخطط عدة مرات في الثانية.
هناك أيضًا قائمة كبيرة من مكتبات الرسوم البيانية java2s.com
كنت أبحث أيضًا عن مكتبة رسوم بيانية لتطبيق Eclipse RCP، وعثرت على منشور Caleb هنا ويمكنني بالتأكيد أن أوصي بـ SWTChart الآن بنفسي.إنه أسرع بكثير من JFreeChart بالنسبة لي، بالإضافة إلى أنه قابل للتوسعة بسهولة.إذا كنت سأضطر حقًا إلى تقديم شكوى بشأن شيء ما، فسأقول أن javadoc يمكن أن يكون أكثر تفصيلاً قليلاً، ولكن هذا فقط لأقول أن كل شيء آخر رائع.
هناك ايضا مخططات ILOG JViews والذي يبدو مكتمل الميزات إلى حد كبير... إذا كنت تستطيع تحمله.هنا هي بعض المعلومات الإضافية حول استخدامه مع Eclipse.
أقترح عليك المحاولة jzy3d, ، مكتبة جافا بسيطة لرسم البيانات ثلاثية الأبعاد.إنه مخصص لـ java أو AWT أو Swing أو SWT.
بعد تقييم العديد من الخيارات، قررت استخدام مكتبة JavaScript لعرض المخططات في مكون Eclipse الإضافي الخاص بي.كما اقترح zvikico بالفعل، من الممكن عرض صفحة html في المتصفح.في صفحة html، يمكنك استخدام إحدى مكتبات JavaScript للقيام بالتخطيط الفعلي.إذا كنت تستخدم Chartist، فيمكنك حفظ الصورة كملف SVG من قائمة السياق.
بعض مكتبات الرسوم البيانية لجافا سكريبت:
الجارتست: http://gionkunz.github.io/chartist-js
D3js: http://d3js.org
تعويم: http://www.flotcharts.org/
مزيد من أطر الرسوم البيانية لجافا سكريبت: https://en.wikipedia.org/wiki/Comparison_of_JavaScript_charting_frameworks
صورة المثال التشارتي:
مثال كود جافا:
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، انظر
يوجد أيضًا JGraph، لكنني لست متأكدًا مما إذا كان هذا مخصصًا للرسوم البيانية فقط (على سبيل المثال.العقد والحواف)، أو إذا كان يفعل المخططات أيضًا.
وهنا شيء مختلف:من المهم جدًا تضمين صفحات الويب في طرق عرض SWT.لقد قمت بتجربته مؤخرًا ويعمل بشكل جيد جدًا.تستطيع أن ترى أين يحدث هذا:هناك الكثير من مكونات الرسوم البيانية الرائعة لـ HTML، وقد يكون ذلك خيارًا.فقط تأكد من أن المكون من جانب العميل فقط (إلا إذا كنت ترغب في بدء تشغيل خادم).
لم أختبر Flash، لكنني متأكد تمامًا من أنه يمكنك تشغيله (بطبيعة الحال، هذا يعني أن برنامجك سيتطلب تثبيت برنامج Flash الإضافي).
JCharts هو خيار آخر.إنه مشابه لـ JFreeChart لكن الوثائق مجانية.ليس لديه دعم مباشر لـ SWT ولكن يمكنك دائمًا إنشاء صورة وتضمينها في إطار SWT.