JFreeChart লাইব্রেরিতে ChartPanel একটি গুরুত্বপূর্ণ কম্পোনেন্ট যা চার্ট প্রদর্শনের জন্য ব্যবহৃত হয় এবং এর মাধ্যমে ব্যবহারকারীদের চার্টের সাথে ইন্টারঅ্যাক্ট করার সুযোগ প্রদান করা হয়। এর মাধ্যমে আপনি চার্টে zooming, panning, tooltips, annotations, এবং selection events এর মতো ইন্টারঅ্যাকটিভ ফিচার যুক্ত করতে পারবেন।
এখানে আমরা দেখবো কিভাবে ChartPanel ব্যবহার করে বিভিন্ন ধরনের interaction যোগ করা যায়।
১. Zooming এবং Panning যোগ করা
Zooming এবং Panning চার্টে বিভিন্ন অংশে নেভিগেট করার সুযোগ দেয়। ChartPanel এর মধ্যে MouseWheelListener এবং MouseMotionListener ব্যবহার করে এই ফিচার যোগ করা যেতে পারে।
উদাহরণ: Zooming এবং Panning যোগ করা
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class ZoomAndPanExample {
public static void main(String[] args) {
// XYSeries তৈরি করা
XYSeries series = new XYSeries("Data Points");
for (int i = 1; i <= 10; i++) {
series.add(i, Math.random() * 100);
}
// XYSeriesCollection তৈরি করা
XYSeriesCollection dataset = new XYSeriesCollection(series);
// XY Line Chart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Zoom and Pan Example", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset // Dataset
);
// ChartPanel তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(800, 600));
// MouseListener এবং MouseMotionListener এর মাধ্যমে Zooming এবং Panning যোগ করা
chartPanel.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.out.println("Mouse Pressed: " + e.getX() + ", " + e.getY());
}
});
chartPanel.addMouseWheelListener(e -> {
if (e.getWheelRotation() < 0) {
// Zoom In
chartPanel.zoomInBoth(0.1, 0.1);
} else {
// Zoom Out
chartPanel.zoomOutBoth(0.1, 0.1);
}
});
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- MouseListener এবং MouseWheelListener ব্যবহার করা হয়েছে, যা ব্যবহারকারীর মাউস প্রেস এবং হুইল স্ক্রলিং এর মাধ্যমে ইনপুট নেবে।
- zoomInBoth() এবং zoomOutBoth() মেথড ব্যবহার করে চার্টে zooming করার সুযোগ প্রদান করা হয়েছে।
এটি ব্যবহারকারীকে চার্টে প্যান এবং জুম ইন বা আউট করার সুযোগ প্রদান করে।
২. Tooltips এবং Annotations যোগ করা
Tooltips হলো ব্যবহারকারীর মাউসের কাছাকাছি থাকা ডেটা পয়েন্টের অতিরিক্ত তথ্য প্রদর্শন করে। Annotations চার্টের মধ্যে কোনো নির্দিষ্ট অবস্থান বা বার্তা প্রদর্শন করতে ব্যবহৃত হয়।
উদাহরণ: Tooltips এবং Annotations যোগ করা
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.annotations.XYTextAnnotation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
import java.awt.*;
public class TooltipsAndAnnotationsExample {
public static void main(String[] args) {
// XYSeries তৈরি করা
XYSeries series = new XYSeries("Data Points");
series.add(1, 2);
series.add(2, 4);
series.add(3, 6);
series.add(4, 8);
// XYSeriesCollection তৈরি করা
XYSeriesCollection dataset = new XYSeriesCollection(series);
// XY Line Chart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Tooltips and Annotations Example", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset // Dataset
);
// Annotations যোগ করা
XYTextAnnotation annotation = new XYTextAnnotation("Important Point", 3, 6);
annotation.setFont(new Font("Serif", Font.PLAIN, 14));
annotation.setPaint(Color.RED);
chart.getXYPlot().addAnnotation(annotation);
// Tooltips যোগ করা
chart.getXYPlot().getRenderer().setBaseToolTipGenerator((dataset1, series1, category) ->
"X: " + dataset1.getXDate(series1, category) + ", Y: " + dataset1.getYValue(series1, category)
);
// ChartPanel তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(800, 600));
// JFrame এ Chart দেখানো
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- Annotations:
XYTextAnnotationব্যবহার করে চার্টে একটি টেক্সট আনার (marker) যোগ করা হয়েছে। এটি চার্টের একটি নির্দিষ্ট স্থান (X=3, Y=6) এ একটি টেক্সট যোগ করে। - Tooltips:
setBaseToolTipGeneratorমেথড ব্যবহার করে ডেটা পয়েন্টের জন্য কাস্টম টুলটিপস প্রদর্শন করা হয়েছে।
এটি ব্যবহারকারীর জন্য চার্টের ভিতরে স্পষ্ট তথ্য প্রদর্শন করতে সহায়ক।
৩. Selection Events এবং Interaction
Selection Events ব্যবহারকারী যখন চার্টের কোন অংশ নির্বাচন করে (যেমন, বার বা পয়েন্ট), তখন কিছু নির্দিষ্ট কাজ সম্পাদিত হতে পারে। ChartPanel এ SelectionEvent ব্যবহার করে, আপনি ব্যবহারকারীর নির্বাচিত পয়েন্ট বা সিরিজের ডেটা সংগ্রহ করতে পারেন।
উদাহরণ: Selection Event যোগ করা
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class SelectionEventExample {
public static void main(String[] args) {
// DefaultCategoryDataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "Series1", "Category1");
dataset.addValue(200, "Series1", "Category2");
dataset.addValue(300, "Series1", "Category3");
// Bar Chart তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Selection Event Example", // Chart Title
"Category", // X-Axis Label
"Value", // Y-Axis Label
dataset // Dataset
);
// ChartPanel তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(800, 600));
// Selection Event Listener যোগ করা
chartPanel.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.out.println("Mouse Pressed: X=" + e.getX() + ", Y=" + e.getY());
}
});
// JFrame এ Chart দেখানো
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- MouseListener এর মাধ্যমে ব্যবহারকারী যখন চার্টে কোন পয়েন্টে ক্লিক করবেন, তখন তার X এবং Y অবস্থান কনসোলে প্রদর্শিত হবে।
উপসংহার
JFreeChart এ ChartPanel ব্যবহার করে আপনি বিভিন্ন ধরনের ইন্টারঅ্যাকশন যেমন Zooming, Panning, Tooltips, Annotations, এবং Selection Events সহজেই যোগ করতে পারেন। এগুলি ব্যবহারকারীর জন্য চার্টের সাথে যোগাযোগ এবং চার্টের ডেটার সাথে ইন্টারঅ্যাক্ট করতে সহায়ক। JFreeChart এর এই ইন্টারঅ্যাকটিভ ফিচারগুলি আপনার চার্টকে আরও কার্যকর এবং ব্যবহারকারী-বান্ধব করে তোলে।
Read more