JFreeChart একটি শক্তিশালী Java লাইব্রেরি যা ডেটা ভিজ্যুয়ালাইজেশন এবং চার্ট তৈরি করতে ব্যবহৃত হয়। JavaFX, Java এর একটি গ্রাফিক্যাল ইউজার ইন্টারফেস লাইব্রেরি, ব্যবহারকারীদের আরও ইন্টারঅ্যাকটিভ অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। JFreeChart এবং JavaFX একত্রে ব্যবহৃত হলে একটি শক্তিশালী গ্রাফিক্যাল ভিজ্যুয়ালাইজেশন তৈরি করা সম্ভব হয়, যেখানে চার্টের উপর ইন্টারঅ্যাকশন যুক্ত করা যায়।
এই গাইডে, আমরা দেখব কিভাবে JFreeChart এবং JavaFX ব্যবহার করে ইন্টারঅ্যাকটিভ চার্ট তৈরি করা যায়, যা ব্যবহারকারীদের সঙ্গে সরাসরি যোগাযোগ স্থাপন করতে পারে, যেমন zooming, panning, এবং tooltip ইত্যাদি।
1. JFreeChart এবং JavaFX এর সংমিশ্রণ
যেহেতু JFreeChart মূলত Swing লাইব্রেরি ভিত্তিক, তাই এটি সরাসরি JavaFX এ একত্রিত করা কঠিন হতে পারে। তবে, JFreeChart চার্টকে JavaFX এ ইন্টিগ্রেট করার জন্য JFreeChartPanel এবং JavaFX এর মধ্যে একটি SwingNode ব্যবহার করতে হয়।
1.1 SwingNode ব্যবহার করে JFreeChart এবং JavaFX এর ইন্টিগ্রেশন
SwingNode হল JavaFX এর একটি উপাদান যা Swing উপাদানগুলিকে JavaFX UI তে অন্তর্ভুক্ত করার জন্য ব্যবহৃত হয়।
2. JFreeChart এবং JavaFX এর জন্য Interactivity কনফিগার করা
এখানে একটি উদাহরণ দেখানো হলো যেখানে JFreeChart এবং JavaFX এর মাধ্যমে একটি ইন্টারঅ্যাকটিভ Line Chart তৈরি করা হয়েছে, এবং সেই চার্টে tooltip এবং zooming/panning কনফিগার করা হয়েছে।
উদাহরণ: JFreeChart এবং JavaFX এর মাধ্যমে ইন্টারঅ্যাকটিভ Line Chart
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.embed.swing.SwingNode;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
public class JFreeChartJavaFXExample extends Application {
@Override
public void start(Stage primaryStage) {
// Create the chart and dataset
JFreeChart chart = createChart(createDataset());
// Convert JFreeChart to JavaFX SwingNode
SwingNode swingNode = new SwingNode();
swingNode.setContent(new ChartPanel(chart));
// Create a JavaFX layout
StackPane root = new StackPane();
root.getChildren().add(swingNode);
// Set up the JavaFX scene
Scene scene = new Scene(root, 800, 600);
primaryStage.setTitle("JFreeChart and JavaFX Example");
primaryStage.setScene(scene);
primaryStage.show();
}
private XYSeriesCollection createDataset() {
XYSeries series = new XYSeries("Stock Data");
series.add(1, 100);
series.add(2, 200);
series.add(3, 300);
series.add(4, 400);
series.add(5, 500);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
return dataset;
}
private JFreeChart createChart(XYSeriesCollection dataset) {
// Create the line chart
JFreeChart chart = ChartFactory.createXYLineChart(
"Stock Price Over Time", // Title
"Time", // X-Axis Label
"Price", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot orientation
true, // Show Legend
true, // Show Tooltips
false // No URLs
);
// Enable zooming and panning
XYPlot plot = chart.getXYPlot();
plot.setDomainPannable(true); // Enable panning on X-Axis
plot.setRangePannable(true); // Enable panning on Y-Axis
plot.setDomainZoomable(true); // Enable zooming on X-Axis
plot.setRangeZoomable(true); // Enable zooming on Y-Axis
// Set renderer for the chart
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesLinesVisible(0, true); // Enable line
renderer.setSeriesShapesVisible(0, true); // Enable data points
plot.setRenderer(renderer);
return chart;
}
public static void main(String[] args) {
launch(args);
}
}
ব্যাখ্যা:
- ChartPanel:
JFreeChartপ্রদর্শনের জন্য Swing উপাদান ব্যবহার করা হয়েছে। - SwingNode:
SwingNodeব্যবহার করে JFreeChart কে JavaFX UI তে অন্তর্ভুক্ত করা হয়েছে। - Zooming and Panning:
setDomainZoomable(true)এবংsetRangeZoomable(true)দিয়ে zooming সক্ষম করা হয়েছে।setDomainPannable(true)এবংsetRangePannable(true)দিয়ে panning সক্ষম করা হয়েছে। - Tooltip: JFreeChart এ ডিফল্টভাবে tooltips সক্ষম থাকে। এটি ব্যবহারকারীদের মাউস পয়েন্টার দ্বারা ডেটা পয়েন্ট সম্পর্কে বিস্তারিত তথ্য দেখায়।
3. Additional Interactivity Features
3.1 Tooltip কাস্টমাইজেশন
JFreeChart এ tooltip ডিফল্টভাবে enabled থাকে, তবে আপনি এর কন্টেন্ট কাস্টমাইজ করতে পারেন। নিচের উদাহরণে দেখানো হয়েছে কীভাবে tooltip কাস্টমাইজ করা যায়:
chart.getXYPlot().setDomainCrosshairVisible(true); // Enable crosshair on X-Axis
chart.getXYPlot().setRangeCrosshairVisible(true); // Enable crosshair on Y-Axis
chart.setToolTipGenerator(new XYToolTipGenerator() {
@Override
public String generateToolTip(XYDataset dataset, int series, int item) {
return "Time: " + dataset.getXDate(series, item) + ", Price: " + dataset.getYValue(series, item);
}
});
এখানে, XYToolTipGenerator ব্যবহার করা হয়েছে tooltip কাস্টমাইজ করতে।
3.2 Mouse Event Handling
JavaFX মাউস ইভেন্ট হ্যান্ডলিং ব্যবহারের মাধ্যমে আপনি আরও ইন্টারঅ্যাকটিভ ফিচার যোগ করতে পারেন। যেমন, মাউস ড্র্যাগ এবং ক্লিকের মাধ্যমে আপনার চার্টে বিভিন্ন পরিবর্তন করা।
chartPanel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// Zoom in on the chart when clicked
plot.zoomInDomain(0.5); // Zoom in on X-Axis
plot.zoomInRange(0.5); // Zoom in on Y-Axis
}
});
এটি একটি উদাহরণ যেখানে মাউস ক্লিকের মাধ্যমে zooming করা হয়।
4. Zooming এবং Panning কাস্টমাইজেশন
- Zooming: Zooming ব্যবহারকারীদের চার্টের উপর স্কেল পরিবর্তন করতে সহায়তা করে। এটি Mouse Wheel বা Button এর মাধ্যমে করা যায়। JFreeChart এ আপনি X এবং Y অক্ষের জন্য আলাদাভাবে zooming কাস্টমাইজ করতে পারেন।
- Panning: Panning ব্যবহারকারীদের চার্টের নির্দিষ্ট অংশ দেখতে সহায়তা করে। এটি সাধারণত মাউস ড্র্যাগ ব্যবহার করে করা হয়।
নিচে কিছু কাস্টমাইজেশন দেখানো হলো:
plot.setDomainPannable(true); // Enable panning on X-Axis
plot.setRangePannable(true); // Enable panning on Y-Axis
plot.setDomainZoomable(true); // Enable zooming on X-Axis
plot.setRangeZoomable(true); // Enable zooming on Y-Axis
সারাংশ
JFreeChart এবং JavaFX ব্যবহার করে আপনি ইন্টারঅ্যাকটিভ চার্ট তৈরি করতে পারেন যা ব্যবহারকারীদের জন্য আরও কার্যকরী এবং আকর্ষণীয় হতে পারে। SwingNode ব্যবহার করে JFreeChart কে JavaFX UI তে অন্তর্ভুক্ত করা হয় এবং তারপরে zooming, panning, tooltips এবং মাউস ইভেন্ট হ্যান্ডলিংয়ের মাধ্যমে চার্টের ইন্টারঅ্যাকটিভিটি কাস্টমাইজ করা হয়। এইভাবে আপনি সহজেই আপনার চার্টে zooming এবং panning ফিচার যোগ করতে পারেন, যা ডেটা বিশ্লেষণকে আরও সহজ এবং আকর্ষণীয় করে তোলে।
Read more