JFreeChart একটি শক্তিশালী Java লাইব্রেরি যা ডেটা ভিজ্যুয়ালাইজেশন এবং চার্ট তৈরি করতে ব্যবহৃত হয়। Zooming এবং Panning হল দুটি গুরুত্বপূর্ণ ফিচার যা ব্যবহারকারীদের চার্টের উপর অর্গানিকভাবে স্কেল এবং প্যান করতে দেয়, যাতে তারা ডেটার নির্দিষ্ট অংশ দেখতে পারে। JFreeChart এ Zooming এবং Panning এর মাধ্যমে আপনি আপনার চার্টে ডেটা ভিজ্যুয়ালাইজেশনকে আরও ইন্টারেক্টিভ এবং সুবিধাজনক করতে পারেন।
এই গাইডে আমরা দেখব কিভাবে Zooming এবং Panning ফিচারগুলো JFreeChart এ কনফিগার করা যায়।
1. Zooming এবং Panning কি?
- Zooming: এটি চার্টের স্কেল পরিবর্তন করে, যার মাধ্যমে ব্যবহারকারী একটি নির্দিষ্ট ডেটার অংশকে বড় বা ছোট দেখতে পারে। এটি X বা Y অ্যাক্সিসের উপর স্কেল পরিবর্তন করে।
- Panning: এটি চার্টের দৃশ্য (view) স্থানান্তর করে, যার মাধ্যমে ব্যবহারকারী চার্টের নির্দিষ্ট অংশ দেখতে পারে। প্যানিং ব্যবহার করে আপনি চার্টের ডেটা এক্সপ্লোর করতে পারেন।
2. Zooming এবং Panning কনফিগার করা
2.1 XYPlot এ Zooming এবং Panning কনফিগার করা
XYPlot হল একটি সাধারণ প্লট টাইপ যা XY Chart তৈরি করতে ব্যবহৃত হয়। JFreeChart এ Zooming এবং Panning কনফিগার করতে হলে, আপনাকে Plot এ RangeZoomable এবং DomainZoomable সেট করতে হবে। এছাড়া, MouseWheelListener এবং MouseEvent ব্যবহার করে আপনি মাউস হুইল এবং ড্র্যাগিং এর মাধ্যমে প্যানিং এবং জুমিং কনফিগার করতে পারেন।
উদাহরণ: XY Line Chart এর জন্য Zooming এবং Panning
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.ui.ApplicationFrame;
import org.jfree.chart.ui.RefineryUtilities;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class ZoomingPanningExample extends ApplicationFrame {
public ZoomingPanningExample(String title) {
super(title);
JFreeChart chart = createChart(createDataset());
chart.setNotify(true); // Enable notifications for updates
XYPlot plot = (XYPlot) chart.getPlot();
// Enable zooming and panning
plot.setDomainPannable(true); // Allow panning on the X-axis
plot.setRangePannable(true); // Allow panning on the Y-axis
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
chartPanel.setMouseWheelEnabled(true); // Enable zooming with the mouse wheel
chartPanel.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
chartPanel.setMouseWheelEnabled(true); // Enable zooming when the mouse is pressed
}
});
setContentPane(chartPanel);
}
private XYSeriesCollection createDataset() {
XYSeries series = new XYSeries("Data");
series.add(1, 1);
series.add(2, 4);
series.add(3, 9);
series.add(4, 16);
series.add(5, 25);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
return dataset;
}
private JFreeChart createChart(XYSeriesCollection dataset) {
return ChartFactory.createXYLineChart(
"Zooming and Panning Example", // Chart title
"X-Axis", // X-Axis label
"Y-Axis", // Y-Axis label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot orientation
true, // Include legend
true, // Tooltips
false // URLs
);
}
public static void main(String[] args) {
ZoomingPanningExample demo = new ZoomingPanningExample("Zooming and Panning Example");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
ব্যাখ্যা:
- setDomainPannable(true): X-Axis এ প্যানিং সক্ষম করে।
- setRangePannable(true): Y-Axis এ প্যানিং সক্ষম করে।
- setMouseWheelEnabled(true): মাউস হুইল দিয়ে জুমিং সক্ষম করা হয়।
এটি মাউস হুইল দিয়ে চার্ট জুম ইন এবং আউট করার ক্ষমতা প্রদান করে। এছাড়া, ড্র্যাগ করে প্যানিংও সম্ভব।
3. Zooming এবং Panning কাস্টমাইজেশন
3.1 Zooming কাস্টমাইজেশন
যদি আপনি বিশেষভাবে শুধুমাত্র X বা Y অ্যাক্সিসের জন্য zooming কাস্টমাইজ করতে চান, তবে আপনাকে সেই অ্যাক্সিসের জন্য setRangeZoomable এবং setDomainZoomable কাস্টমাইজ করতে হবে।
উদাহরণ: শুধুমাত্র X-Axis Zooming Enable করা
plot.setDomainZoomable(true); // Enable zooming only on the X-axis
plot.setRangeZoomable(false); // Disable zooming on the Y-axis
এটি X-Axis এর উপর zooming সক্ষম করবে এবং Y-Axis এর zooming নিষ্ক্রিয় করবে।
3.2 Panning কাস্টমাইজেশন
Panning শুধুমাত্র X বা Y অ্যাক্সিসে সক্ষম করতে হলে, আপনাকে setDomainPannable এবং setRangePannable পদ্ধতিগুলি ব্যবহার করতে হবে।
উদাহরণ: শুধুমাত্র Y-Axis Panning Enable করা
plot.setDomainPannable(false); // Disable panning on the X-axis
plot.setRangePannable(true); // Enable panning on the Y-axis
এটি শুধুমাত্র Y-Axis এর উপর প্যানিং সক্ষম করবে এবং X-Axis এর প্যানিং নিষ্ক্রিয় করবে।
4. Zooming এবং Panning টুলবার ব্যবহার করা
JFreeChart এ zooming এবং panning কনফিগার করার সময় আপনি কিছু অতিরিক্ত কাস্টম টুলবার এবং ইন্টারেক্টিভ ফিচার যোগ করতে পারেন। যেমন, আপনি Zoom In এবং Zoom Out বাটন যোগ করতে পারেন।
উদাহরণ:
// ChartPanel এর মধ্যে Zoom Control যোগ করা
chartPanel.setMouseWheelEnabled(true);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
এটি চাটের মাউস হুইল সাপোর্ট যোগ করবে, যাতে ব্যবহারকারী চার্টে zoom in এবং zoom out করতে পারে।
5. Multiple Plot Zooming
যদি আপনার একাধিক প্লট (plots) থাকে এবং আপনি চান যে সকল প্লট একই সময়ে zoom in এবং zoom out হোক, তবে আপনি একটি ZoomablePlot তৈরি করতে পারেন।
উদাহরণ:
plot.setDomainPannable(true);
plot.setRangePannable(true);
plot.setDomainZoomable(true);
plot.setRangeZoomable(true);
এটি সকল প্লটের জন্য panning এবং zooming কনফিগার করবে।
সারাংশ
Zooming এবং Panning ব্যবহারকারীকে তাদের চার্টে ডেটার নির্দিষ্ট অংশ দেখতে সাহায্য করে। JFreeChart এর মাধ্যমে আপনি XYPlot অথবা CategoryPlot এর মাধ্যমে zooming এবং panning কনফিগার করতে পারেন। এটি মাউস হুইল, ড্র্যাগ এবং কাস্টম কনফিগারেশনের মাধ্যমে করা সম্ভব। MouseWheelListener, MouseAdapter, এবং setDomainPannable/setRangePannable এর মাধ্যমে আপনি আপনার চার্টের ইন্টারঅ্যাকটিভিটির অভিজ্ঞতা আরও উন্নত করতে পারেন।
Read more