JFreeChart একটি শক্তিশালী গ্রাফিকাল লাইব্রেরি, যা বিভিন্ন ধরনের চার্ট তৈরি করার জন্য ব্যবহৃত হয়। Event Handling জেফ্রিচার্টে একটি গুরুত্বপূর্ণ ফিচার, যা ব্যবহারকারীর ইনপুট বা ইন্টারঅ্যাকশন (যেমন মাউস ক্লিক, মাউস হোভার, কিবোর্ড ইনপুট) সনাক্ত করে এবং সেই অনুযায়ী চার্টের আচরণ কাস্টমাইজ করার সুযোগ দেয়।
Event Handling সাধারণত MouseListener, MouseMotionListener, KeyListener ইত্যাদি ব্যবহার করে করা হয়। এই ইভেন্টগুলো চার্টের মধ্যে বিভিন্ন ইন্টারঅ্যাকশন সনাক্ত করতে এবং এর সাথে সম্পর্কিত অ্যাকশন গ্রহণ করতে ব্যবহৃত হয়।
১. Mouse Events Handling
Mouse Events (যেমন, Mouse Click, Mouse Hover, Mouse Drag) JFreeChart এ বিভিন্ন কার্যকলাপকে ট্র্যাক করার জন্য ব্যবহৃত হয়।
উদাহরণ: Mouse Click Event Handling
এখানে একটি Bar Chart তৈরি করা হচ্ছে, যেখানে মাউস ক্লিক করলে সংশ্লিষ্ট ডেটা পয়েন্টের মান প্রদর্শিত হবে।
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MouseClickEventExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series1", "Jan");
dataset.addValue(20, "Series1", "Feb");
dataset.addValue(30, "Series1", "Mar");
// Bar Chart তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales for the First Quarter", // Chart Title
"Month", // X-Axis Label
"Sales", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
true, // Show Tooltips
false // URLs
);
// MouseListener দিয়ে Click Event Handling
chart.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
CategoryPlot plot = (CategoryPlot) chart.getPlot();
int categoryIndex = plot.getDomainAxis().getCategoryIndex(e.getPoint());
int datasetIndex = plot.getDatasetIndex(e.getPoint());
// নির্বাচিত ডেটা পয়েন্টের মান দেখানো
double value = dataset.getValue(categoryIndex, datasetIndex).doubleValue();
System.out.println("Clicked on: " + dataset.getColumnKey(categoryIndex) + " - Value: " + value);
}
});
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- MouseAdapter ব্যবহার করে আমরা মাউস ক্লিক ইভেন্ট ট্র্যাক করছি।
mouseClicked()মেথডে ক্লিক করা ডেটা পয়েন্টের মান সনাক্ত করে সেটি কনসোল এ প্রদর্শিত হচ্ছে। - CategoryPlot এর মাধ্যমে ডেটাসেট থেকে ক্লিক করা পয়েন্টের তথ্য পাওয়া গেছে।
২. Mouse Hover Event Handling
Mouse Hover ইভেন্টের মাধ্যমে ব্যবহারকারী যখন মাউস পয়েন্টারটি চার্টের উপর রাখে তখন একটি টুলটিপ বা পপআপ দেখানো যেতে পারে।
উদাহরণ: Mouse Hover Event Handling (Tooltip)
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MouseHoverEventExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series1", "Jan");
dataset.addValue(20, "Series1", "Feb");
dataset.addValue(30, "Series1", "Mar");
// Bar Chart তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales for the First Quarter", // Chart Title
"Month", // X-Axis Label
"Sales", // Y-Axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
true, // Show Tooltips
false // URLs
);
// MouseMotionListener দিয়ে Mouse Hover Event Handling
chart.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
CategoryPlot plot = (CategoryPlot) chart.getPlot();
int categoryIndex = plot.getDomainAxis().getCategoryIndex(e.getPoint());
int datasetIndex = plot.getDatasetIndex(e.getPoint());
// নির্বাচিত ডেটা পয়েন্টের জন্য টুলটিপ
double value = dataset.getValue(categoryIndex, datasetIndex).doubleValue();
String tooltip = "Month: " + dataset.getColumnKey(categoryIndex) + ", Sales: " + value;
System.out.println(tooltip);
}
});
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- MouseMotionListener ব্যবহার করে আমরা Mouse Hover ইভেন্ট ট্র্যাক করেছি। যখন ব্যবহারকারী মাউস পয়েন্টারটি চার্টের উপর রাখবে, তখন সংশ্লিষ্ট পয়েন্টের জন্য টুলটিপ প্রদর্শিত হবে।
- mouseMoved() মেথডের মাধ্যমে মাউসের অবস্থান অনুযায়ী ডেটা পয়েন্টের মান দেখতে পাওয়া যায়।
৩. Zooming এবং Panning Events Handling
Zooming এবং Panning ইভেন্ট ব্যবহারকারীদের চার্টে জুম ইন বা আউট করার সুবিধা দেয়, অথবা গ্রাফের মধ্যে নেভিগেট করার সুযোগ দেয়। JFreeChart এর XYPlot এবং CategoryPlot এ এই কার্যকলাপ ব্যবহৃত হতে পারে।
উদাহরণ: Zooming এবং Panning
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
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 ZoomingAndPanningExample {
public static void main(String[] args) {
// XYSeries তৈরি করা
XYSeries series = new XYSeries("Data Points");
series.add(1, 10);
series.add(2, 15);
series.add(3, 20);
series.add(4, 25);
series.add(5, 30);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// XYChart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Zooming and Panning Example", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset // Dataset
);
XYPlot plot = chart.getXYPlot();
// Zooming এবং Panning এর জন্য প্যারামিটার সেট করা
plot.setDomainPannable(true); // X-Axis প্যানিং সক্ষম করা
plot.setRangePannable(true); // Y-Axis প্যানিং সক্ষম করা
plot.setDomainZoomable(true); // X-Axis জুমিং সক্ষম করা
plot.setRangeZoomable(true); // Y-Axis জুমিং সক্ষম করা
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- DomainPannable এবং RangePannable সেট করে আমরা Panning সক্ষম করেছি, যাতে ব্যবহারকারী X এবং Y অক্ষের মধ্যে নেভিগেট করতে পারে।
- DomainZoomable এবং RangeZoomable সেট করে আমরা Zooming সক্ষম করেছি, যাতে ব্যবহারকারী চার্টে জুম ইন বা আউট করতে পারে।
সারসংক্ষেপ
Event Handling জেফ্রিচার্টে ব্যবহারকারীর ইনপুট বা ইন্টারঅ্যাকশন সনাক্ত করতে সহায়ক, যা চার্টে ইন্টারঅ্যাকটিভ উপাদান যোগ করে। MouseEvent, MouseMotionEvent, Zooming, এবং Panning এর মাধ্যমে আপনি চার্টে বিভিন্ন ধরণের ইভেন্ট ট্র্যাক করতে পারেন এবং সেই অনুযায়ী বিভিন্ন অ্যাকশন গ্রহণ করতে পারেন। JFreeChart এ Event Handling ইন্টারঅ্যাকটিভ ডেটা ভিজুয়ালাইজেশন তৈরি করার জন্য একটি গুরুত্বপূর্ণ টুল।
JFreeChart-এ ChartMouseListener ব্যবহার করে আপনি mouse events (যেমন ক্লিক, হোভার) ট্র্যাক করতে পারেন এবং সেই অনুযায়ী Event Handling করতে পারেন। এটি বিশেষভাবে দরকারী যখন আপনি চার্টের উপর ব্যবহারকারীর ইন্টারঅ্যাকশন ট্র্যাক করতে চান, যেমন ব্যবহারকারী একটি নির্দিষ্ট পয়েন্টে ক্লিক করলে সেই ডেটার বিস্তারিত প্রদর্শন করা বা টুলটিপ দেখানো।
ChartMouseListener সাধারণত ChartPanel-এ MouseEvent যুক্ত করার জন্য ব্যবহৃত হয়। এটি আপনাকে চার্টের উপর বিভিন্ন ধরনের মাউস ইভেন্ট (যেমন ক্লিক, মুভ, হোভার) সনাক্ত করার সুযোগ দেয়।
ChartMouseListener এর উদাহরণ
উদাহরণ: ChartMouseListener দিয়ে মাউস ক্লিক ইভেন্ট ট্র্যাক করা
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.event.ChartMouseEvent;
import org.jfree.chart.event.ChartMouseListener;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
public class ChartMouseListenerExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series1", "Category1");
dataset.addValue(15, "Series1", "Category2");
dataset.addValue(20, "Series1", "Category3");
// বার চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales by Category", // চার্টের শিরোনাম
"Category", // এক্স-অক্ষের নাম
"Sales", // ওয়াই-অক্ষের নাম
dataset // ডেটাসেট
);
// ChartPanel তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// ChartMouseListener যোগ করা
chartPanel.addChartMouseListener(new ChartMouseListener() {
@Override
public void chartMouseClicked(ChartMouseEvent event) {
// ক্লিক করা পয়েন্টের তথ্য পাওয়া
String category = event.getEntity().getDescription();
System.out.println("Chart clicked at: " + category);
}
@Override
public void chartMouseMoved(ChartMouseEvent event) {
// মাউস মুভ করলে পয়েন্টের তথ্য পাওয়া
String category = event.getEntity().getDescription();
System.out.println("Mouse moved over: " + category);
}
});
// JFrame এ চার্ট প্রদর্শন করা
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
কোড ব্যাখ্যা:
- ChartMouseListener:
addChartMouseListenerমেথড ব্যবহার করে ChartPanel এ ChartMouseListener যোগ করা হয়েছে।- chartMouseClicked: ব্যবহারকারী যখন চার্টে ক্লিক করবে, তখন এটি সেই পয়েন্টের তথ্য প্রদর্শন করবে।
- chartMouseMoved: ব্যবহারকারী যখন মাউস চার্টের উপর দিয়ে মুভ করবে, তখন এটি সেই পয়েন্টের তথ্য প্রদর্শন করবে।
- ChartMouseEvent: এটি মাউস ইভেন্টের তথ্য ধারণ করে, যেমন ক্লিক করা পয়েন্ট, ইভেন্টের অবস্থান ইত্যাদি।
ChartMouseListener এর মাধ্যমে অন্যান্য ইভেন্ট হ্যান্ডলিং
ChartMouseListener ব্যবহার করে আপনি বিভিন্ন মাউস ইভেন্ট হ্যান্ডল করতে পারেন, যেমন:
- MouseClicked: ব্যবহারকারী যখন চার্টে ক্লিক করে।
- MouseMoved: মাউস যখন চার্টের উপর মুভ করে।
- MousePressed: ব্যবহারকারী যখন চার্টে মাউস প্রেস করে।
- MouseReleased: ব্যবহারকারী যখন মাউস ছেড়ে দেয়।
এছাড়া, ChartMouseEvent থেকে আপনি অন্যান্য তথ্য যেমন মাউসের অবস্থান এবং ইভেন্টের আঙ্গিক (entity) পেতে পারেন।
উদাহরণ: MousePressed ইভেন্ট হ্যান্ডলিং
chartPanel.addChartMouseListener(new ChartMouseListener() {
@Override
public void chartMouseClicked(ChartMouseEvent event) {
// কোড এখানে
}
@Override
public void chartMouseMoved(ChartMouseEvent event) {
// কোড এখানে
}
@Override
public void chartMousePressed(ChartMouseEvent event) {
// মাউস প্রেস করলে, প্রিন্ট করা
System.out.println("Mouse pressed at: " + event.getEntity());
}
@Override
public void chartMouseReleased(ChartMouseEvent event) {
// মাউস ছেড়ে দিলে
System.out.println("Mouse released at: " + event.getEntity());
}
});
ChartMouseListener এর মাধ্যমে Tooltips এবং Interactivity যোগ করা
ChartMouseListener ব্যবহার করে আপনি Tooltip এবং অন্যান্য ইন্টারঅ্যাকটিভ ফিচারও যুক্ত করতে পারেন। যেমন, ব্যবহারকারী যখন চার্টে ক্লিক করে, তখন আপনি নির্দিষ্ট ডেটার বিশদ তথ্য প্রদর্শন করতে পারেন।
উদাহরণ: Tooltips তৈরি করা
chartPanel.addChartMouseListener(new ChartMouseListener() {
@Override
public void chartMouseClicked(ChartMouseEvent event) {
// চার্টে ক্লিক করলে, টুলটিপ দেখানো
String tooltip = "You clicked on: " + event.getEntity().getDescription();
System.out.println(tooltip);
}
@Override
public void chartMouseMoved(ChartMouseEvent event) {
// মাউস মুভ করলে, টুলটিপ দেখানো
String tooltip = "Mouse moved over: " + event.getEntity().getDescription();
System.out.println(tooltip);
}
});
এখানে, আপনি chartMouseClicked এবং chartMouseMoved ইভেন্টের মধ্যে টুলটিপ তৈরি এবং প্রদর্শন করতে পারেন।
সারসংক্ষেপ
ChartMouseListener একটি শক্তিশালী ইন্টারঅ্যাকশন টুল যা JFreeChart ব্যবহার করে চার্টের উপর মাউস ইভেন্ট ট্র্যাক করতে সহায়ক। এটি বিশেষভাবে mouse clicks, mouse movements, mouse presses, এবং mouse releases হ্যান্ডল করার জন্য ব্যবহৃত হয়। এই ইভেন্ট হ্যান্ডলিং টুল ব্যবহার করে আপনি চার্টে tooltip, interactive features, বা event-based updates যোগ করতে পারেন। ChartMouseListener চার্টের ব্যবহারকারীদের সাথে আরও ইন্টারঅ্যাকটিভ এবং রিচ ভিজুয়ালাইজেশন অভিজ্ঞতা তৈরি করতে সহায়ক।
JFreeChart ব্যবহার করে আপনি গ্রাফ বা চার্টে Mouse Events এবং Click Actions যোগ করতে পারেন। এটি ব্যবহারকারীদের চার্টের মধ্যে ইন্টারঅ্যাকশন করার সুযোগ দেয়, যেমন একটি পয়েন্টে ক্লিক করলে বিস্তারিত তথ্য দেখানো, পয়েন্টের উপর হোভার করলে টুলটিপ দেখানো, বা মাউসের মাধ্যমে গ্রাফে প্যানিং ও জুমিং করা।
Mouse Events এবং Click Actions সাধারণত MouseListener, MouseMotionListener, এবং ChartPanel ব্যবহার করে যোগ করা হয়।
১. Mouse Click Actions এবং Events যোগ করা
JFreeChart এ মাউস ক্লিক বা হোভার ইভেন্টগুলি ট্র্যাক করতে MouseListener ব্যবহার করা হয়। আপনি এটি ব্যবহার করে চার্টের নির্দিষ্ট অংশে ক্লিক করার পর কী কাজ হবে তা নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, একটি ক্লিক করলে নির্দিষ্ট ডেটা পয়েন্টের মান বা একটি নির্দিষ্ট ডেটা ভিউ প্রদর্শন করা।
উদাহরণ: Mouse Click Action
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.plot.PlotOrientation;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MouseClickExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series1", "Jan");
dataset.addValue(20, "Series1", "Feb");
dataset.addValue(30, "Series1", "Mar");
// বার চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales for the First Quarter", // চার্টের শিরোনাম
"Month", // এক্স-অক্ষের নাম
"Sales", // ওয়াই-অক্ষের নাম
dataset, // ডেটাসেট
PlotOrientation.VERTICAL, // প্লট অরিয়েন্টেশন
true, // লেজেন্ড প্রদর্শন
true, // টুলটিপস
false // URL সমর্থন
);
// MouseAdapter দিয়ে Mouse Click Action যোগ করা
chart.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// ক্লিক ইভেন্ট ট্র্যাক করা
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Clicked at coordinates: (" + x + ", " + y + ")");
// এখানে আপনার ক্লিক করার পর প্রয়োজনীয় Action যুক্ত করতে পারেন
JOptionPane.showMessageDialog(null, "You clicked on the chart at coordinates (" + x + ", " + y + ")");
}
});
// ChartPanel তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- MouseAdapter ব্যবহার করে মাউসের ক্লিক ট্র্যাক করা হয়েছে।
- মাউস ক্লিকের পর JOptionPane ব্যবহার করে একটি ডায়ালগ বক্সে ক্লিক করা পয়েন্টের স্থান (X, Y) প্রদর্শন করা হয়েছে।
২. Mouse Hover এবং Tooltip Action
Mouse Hover ইভেন্টে আপনি চার্টের পয়েন্টে মাউস হোভার করলে সেই পয়েন্টের টুলটিপ বা তথ্য প্রদর্শন করতে পারেন। ChartPanel ব্যবহার করে আপনি মাউস হোভার ইভেন্ট ট্র্যাক করতে পারেন এবং Tooltips ব্যবহার করে বিস্তারিত তথ্য প্রদর্শন করতে পারেন।
উদাহরণ: Mouse Hover এবং Tooltip Action
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MouseHoverExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series1", "Jan");
dataset.addValue(20, "Series1", "Feb");
dataset.addValue(30, "Series1", "Mar");
// বার চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales for the First Quarter", // চার্টের শিরোনাম
"Month", // এক্স-অক্ষের নাম
"Sales", // ওয়াই-অক্ষের নাম
dataset, // ডেটাসেট
org.jfree.chart.plot.PlotOrientation.VERTICAL, // প্লট অরিয়েন্টেশন
true, // লেজেন্ড প্রদর্শন
true, // টুলটিপস
false // URL সমর্থন
);
// ChartPanel তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// MouseListener দিয়ে Mouse Hover Action যোগ করা
chartPanel.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
// মাউস মুভের সময় পয়েন্টের সাথে সম্পর্কিত তথ্য দেখানো
int x = e.getX();
int y = e.getY();
System.out.println("Mouse Moved to: (" + x + ", " + y + ")");
// আপনি এখানে মাউস হোভার করার সময় টুলটিপ বা তথ্য দেখাতে পারেন
}
});
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- MouseMotionListener ব্যবহার করে মাউস মুভমেন্ট ট্র্যাক করা হয়েছে।
- এখানে MouseMoved ইভেন্টে ক্লিক না করে, শুধুমাত্র মাউসটি মুভ করা হলে পয়েন্টের উপর টুলটিপ বা তথ্য দেখানো হবে।
৩. Zooming এবং Panning
Zooming এবং Panning একটি সাধারণ ইন্টারঅ্যাকটিভ ফিচার যেখানে ব্যবহারকারী চার্টের মধ্যে প্যান এবং জুম করতে পারেন। এটি ডেটার বিশদ বিশ্লেষণ করতে সহায়ক হয়। JFreeChart এ আপনি XYPlot এ Zooming এবং Panning ফিচার যোগ করতে পারেন।
উদাহরণ: Zooming এবং Panning
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.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
public class ZoomingPanningExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
XYSeries series = new XYSeries("Data Points");
series.add(1.0, 5.0);
series.add(2.0, 7.0);
series.add(3.0, 9.0);
XYSeriesCollection dataset = new XYSeriesCollection(series);
// XYLineChart তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Zooming and Panning Example", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset // Dataset
);
XYPlot plot = (XYPlot) chart.getPlot();
plot.setDomainPannable(true); // Panning সক্রিয় করা
plot.setRangePannable(true); // Panning সক্রিয় করা
plot.setDomainZoomable(true); // Zooming সক্রিয় করা
plot.setRangeZoomable(true); // Zooming সক্রিয় করা
// ChartPanel তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- XYPlot এ setDomainPannable(true) এবং setRangePannable(true) ব্যবহার করে প্যানিং সক্রিয় করা হয়েছে।
- setDomainZoomable(true) এবং setRangeZoomable(true) ব্যবহার করে জুমিং সক্রিয় করা হয়েছে।
সারসংক্ষেপ
JFreeChart এ Mouse Events এবং Click Actions যোগ করা সহজ এবং ইন্টারঅ্যাকটিভ ডেটা ভিজুয়ালাইজেশন তৈরি করতে সহায়ক। MouseListener, MouseMotionListener, এবং ChartPanel ব্যবহার করে আপনি মাউস ক্লিক এবং মাউস হোভার ইভেন্ট ট্র্যাক করতে পারেন, এবং Zooming, Panning, Tooltip এবং Click Actions এর মাধ্যমে চার্টের সাথে ইন্টারঅ্যাকশন করার সুবিধা প্রদান করতে পারেন। এই ফিচারগুলো ব্যবহারকারীদের জন্য ডেটার বিশ্লেষণ সহজ এবং কার্যকর করে তোলে।
JFreeChart ব্যবহার করে আপনি ডেটার পরিবর্তনের সাথে সাথে চার্টের আপডেট করতে পারেন, যা Dataset Change Event এবং Dynamic Chart Update এর মাধ্যমে সম্পন্ন করা হয়। যখন ডেটা পরিবর্তিত হয়, তখন আপনি Dataset Change Event ব্যবহার করে সেই পরিবর্তন চার্টে রিফ্লেক্ট করতে পারেন। এই পদ্ধতিটি ইন্টারঅ্যাকটিভ ডেটা ভিজুয়ালাইজেশন তৈরি করতে সহায়ক, যেখানে চার্টটি ডেটার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে আপডেট হয়।
১. Dataset Change Event
Dataset Change Event তখন ঘটে যখন ডেটাসেটের কোন পরিবর্তন (যেমন নতুন ডেটা যোগ করা, ডেটা আপডেট বা মুছে ফেলা) হয়। JFreeChart স্বয়ংক্রিয়ভাবে এই ইভেন্টগুলো ক্যাপচার করে এবং চার্টে পরিবর্তন প্রদর্শন করে।
Dataset Change Event উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DatasetChangeEvent;
import org.jfree.data.general.DatasetChangeListener;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DatasetChangeEventExample {
public static void main(String[] args) {
// Default Dataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series1", "Category1");
dataset.addValue(20, "Series1", "Category2");
dataset.addValue(30, "Series1", "Category3");
// DatasetChangeListener যোগ করা
dataset.addChangeListener(new DatasetChangeListener() {
@Override
public void datasetChanged(DatasetChangeEvent event) {
System.out.println("Dataset has changed!");
// এখানে চার্টে পরিবর্তন করা বা আপডেট করা হতে পারে
}
});
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Dataset Change Example", // Title
"Category", // X-Axis Label
"Value", // Y-Axis Label
dataset // Dataset
);
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ Chart দেখানো
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
// Dataset পরিবর্তন করা (Event Trigger)
// কিছু সময় পর নতুন ডেটা যোগ করা
new Timer(2000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dataset.addValue(40, "Series1", "Category4"); // নতুন ডেটা যোগ করা
}
}).start();
}
}
ব্যাখ্যা:
- DatasetChangeListener যোগ করা হয়েছে, যা datasetChanged() মেথডের মাধ্যমে Dataset এর পরিবর্তন ট্র্যাক করে।
- Timer ব্যবহার করা হয়েছে, যা একটি নির্দিষ্ট সময় পর Dataset এ নতুন ডেটা যোগ করবে, এবং এটি DatasetChangeEvent ট্রিগার করবে।
- ডেটার পরিবর্তনের সাথে সাথে চার্টে পরিবর্তন দেখানো হবে।
২. Dynamic Chart Update
Dynamic Chart Update এ আপনি ডেটা পরিবর্তন করার পর চার্টটি অটোমেটিক্যালি আপডেট করতে পারেন। এটি সাধারণত লাইভ ডেটা বা রিয়েল-টাইম ডেটা ভিজুয়ালাইজেশন তৈরি করতে ব্যবহৃত হয়, যেমন স্টক মার্কেট বা সেন্সর ডেটার আপডেট।
Dynamic Chart Update উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DynamicChartUpdateExample {
public static void main(String[] args) {
// Default Dataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Series1", "Category1");
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Dynamic Chart Update", // Title
"Category", // X-Axis Label
"Value", // Y-Axis Label
dataset // Dataset
);
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ Chart দেখানো
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
// Dynamic data update করার জন্য Timer ব্যবহার করা
new Timer(1000, new ActionListener() {
int i = 2; // i-থেকে নতুন ডেটা যোগ হবে
@Override
public void actionPerformed(ActionEvent e) {
dataset.addValue(i * 10, "Series1", "Category" + i); // নতুন ডেটা যোগ করা
i++;
}
}).start(); // প্রতি 1 সেকেন্ডে নতুন ডেটা যোগ হবে
}
}
ব্যাখ্যা:
- Timer ব্যবহার করা হয়েছে, যা প্রতি 1 সেকেন্ডে নতুন ডেটা যোগ করবে।
- DefaultCategoryDataset এ নতুন মান যোগ করা হচ্ছে এবং চার্টটি সেই ডেটা অনুযায়ী আপডেট হচ্ছে।
- ChartPanel ব্যবহার করে JFreeChart উপস্থাপন করা হচ্ছে।
এই উদাহরণে, ডেটা প্রতি সেকেন্ডে পরিবর্তিত হবে এবং চার্ট স্বয়ংক্রিয়ভাবে আপডেট হবে।
৩. Real-time Data Update
আপনি যদি real-time data আপডেট করতে চান (যেমন, স্টক মার্কেট ডেটা বা সেন্সর ডেটা), তাহলে Dataset Change Event এবং Dynamic Update এর মাধ্যমে এটি কার্যকরীভাবে করতে পারেন। এটি একটি live data feed বা API ব্যবহার করতে হতে পারে।
Real-time Data Update উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RealTimeDataUpdateExample {
public static void main(String[] args) {
// Default Dataset তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "Stock Price", "0"); // initial stock price
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createLineChart(
"Real-Time Stock Price", // Title
"Time", // X-Axis Label
"Price", // Y-Axis Label
dataset // Dataset
);
// ChartPanel তৈরি এবং JFrame এ প্রদর্শন
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
// Timer ব্যবহার করে real-time data update
new Timer(2000, new ActionListener() {
int time = 1;
@Override
public void actionPerformed(ActionEvent e) {
// নতুন stock price data যোগ করা
dataset.addValue(100 + (Math.random() * 20), "Stock Price", Integer.toString(time));
time++;
}
}).start(); // প্রতি 2 সেকেন্ডে নতুন ডেটা যোগ হবে
}
}
ব্যাখ্যা:
- Real-time data যোগ করার জন্য Timer ব্যবহার করা হয়েছে, যা প্রতি 2 সেকেন্ডে নতুন ডেটা যোগ করবে।
- Math.random() ব্যবহার করে নতুন স্টক প্রাইস তৈরি করা হয়েছে, যা রিয়েল-টাইম ডেটার মতো আচরণ করবে।
- ChartPanel দিয়ে চার্টটি প্রতি 2 সেকেন্ডে আপডেট হবে।
সারসংক্ষেপ
JFreeChart-এ Dataset Change Event এবং Dynamic Chart Update এর মাধ্যমে আপনি চার্টের ডেটা পরিবর্তনের সাথে সাথে স্বয়ংক্রিয়ভাবে চার্ট আপডেট করতে পারেন। Dataset Change Event ব্যবহার করে ডেটার পরিবর্তন ট্র্যাক করা হয় এবং Dynamic Chart Update (যেমন real-time data updates) দিয়ে আপনি ডেটার পরিবর্তনের সাথে সাথে গ্রাফকে অটোমেটিক্যালি আপডেট করতে পারেন। এই পদ্ধতিগুলি ইন্টারঅ্যাকটিভ এবং লাইভ ডেটা ভিজুয়ালাইজেশন তৈরিতে কার্যকরী।
JFreeChart-এ Custom Event Handling ব্যবহার করার মাধ্যমে আপনি চার্টের বিভিন্ন অংশের সাথে ইন্টারঅ্যাক্ট করতে পারেন। এর মাধ্যমে ব্যবহারকারীরা বিভিন্ন ইভেন্ট (যেমন মাউস ক্লিক, মাউস হোভার, কীবোর্ড ইনপুট ইত্যাদি) ব্যবহার করে চার্টের ডেটা বা বৈশিষ্ট্যগুলির সাথে কাজ করতে পারে। JFreeChart-এ Custom Event Handling মূলত MouseListener, MouseMotionListener, এবং KeyListener ব্যবহার করে করা হয়।
JFreeChart-এ Custom Event Handling সেটআপ
JFreeChart-এ কাস্টম ইভেন্ট হ্যান্ডলিং করার জন্য আপনি MouseListener বা MouseAdapter ব্যবহার করতে পারেন, যা ব্যবহারকারীর মাউস ক্লিক বা মুভমেন্ট ট্র্যাক করে। এছাড়া, MouseMotionListener এবং KeyListener ব্যবহার করে আরও কাস্টম ইভেন্ট হ্যান্ডলিং করতে পারেন।
MouseListener এর সাহায্যে Custom Event Handling
MouseListener উদাহরণ
এই উদাহরণে, MouseListener ব্যবহার করে মাউস ক্লিক ইভেন্টটি হ্যান্ডল করা হয়েছে। যখন ব্যবহারকারী চার্টের একটি অংশে ক্লিক করবেন, তখন চার্টের তথ্য (যেমন X এবং Y পজিশন) দেখানো হবে।
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.CategoryPlot;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MouseEventHandlingExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, "Category 1", "Jan");
dataset.addValue(4.0, "Category 1", "Feb");
dataset.addValue(3.0, "Category 1", "Mar");
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales for the First Quarter", // চার্টের শিরোনাম
"Month", // এক্স-অক্ষের নাম
"Sales (in units)", // ওয়াই-অক্ষের নাম
dataset, // ডেটাসেট
PlotOrientation.VERTICAL, // প্লট অরিয়েন্টেশন
true, // লেজেন্ড প্রদর্শন
true, // টুলটিপস
false // URL সমর্থন
);
// MouseListener দিয়ে ক্লিক ইভেন্ট হ্যান্ডল করা
chart.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// ক্লিক করার সময় মাউস পজিশন সনাক্ত করা
int x = e.getX();
int y = e.getY();
JOptionPane.showMessageDialog(null, "Mouse clicked at X: " + x + " Y: " + y);
}
});
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- MouseAdapter ব্যবহার করা হয়েছে যাতে mouseClicked মেথডে মাউস ক্লিক ইভেন্ট হ্যান্ডল করা যায়।
- ক্লিক করার পর মাউসের X এবং Y পজিশন পাওয়া যায় এবং JOptionPane ব্যবহার করে একটি পপ-আপ উইন্ডোতে এটি দেখানো হয়।
MouseMotionListener এর সাহায্যে Custom Event Handling
MouseMotionListener ব্যবহার করলে আপনি মাউস মুভমেন্ট ট্র্যাক করতে পারেন, অর্থাৎ যখন মাউস চার্টের উপর চলে যায় তখন কিছু কর্ম সম্পাদন করা যায়। উদাহরণস্বরূপ, আপনি মাউসের অবস্থান ট্র্যাক করে চার্টের কোন অংশের উপর মাউস চলে এসেছে তা জানতে পারেন।
MouseMotionListener উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
public class MouseMotionEventExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, "Category 1", "Jan");
dataset.addValue(4.0, "Category 1", "Feb");
dataset.addValue(3.0, "Category 1", "Mar");
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Monthly Sales", // চার্টের শিরোনাম
"Month", // এক্স-অক্ষের নাম
"Sales (in units)", // ওয়াই-অক্ষের নাম
dataset, // ডেটাসেট
PlotOrientation.VERTICAL, // প্লট অরিয়েন্টেশন
true, // লেজেন্ড প্রদর্শন
true, // টুলটিপস
false // URL সমর্থন
);
// MouseMotionListener দিয়ে মাউস মুভমেন্ট ট্র্যাক করা
chart.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
// মাউসের পজিশন সনাক্ত করা
int x = e.getX();
int y = e.getY();
System.out.println("Mouse moved to X: " + x + " Y: " + y);
}
});
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- MouseMotionAdapter ব্যবহার করা হয়েছে যেখানে mouseMoved মেথডে মাউসের মুভমেন্ট ট্র্যাক করা হচ্ছে।
- যখন মাউস চার্টের উপর চলে যায়, তখন মাউসের X এবং Y পজিশন কনসোলে প্রদর্শিত হয়।
KeyListener এর সাহায্যে Custom Event Handling
KeyListener ব্যবহার করে আপনি কীবোর্ডের ইনপুট ট্র্যাক করতে পারেন। এটি বিশেষত তখন উপকারী হয় যখন আপনি ডেটা ভিজুয়ালাইজেশনের সাথে কীবোর্ড কমান্ডের মাধ্যমে ইন্টারঅ্যাক্ট করতে চান।
KeyListener উদাহরণ
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class KeyEventHandlingExample {
public static void main(String[] args) {
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, "Category 1", "Jan");
dataset.addValue(4.0, "Category 1", "Feb");
dataset.addValue(3.0, "Category 1", "Mar");
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Monthly Sales", // চার্টের শিরোনাম
"Month", // এক্স-অক্ষের নাম
"Sales (in units)", // ওয়াই-অক্ষের নাম
dataset, // ডেটাসেট
PlotOrientation.VERTICAL, // প্লট অরিয়েন্টেশন
true, // লেজেন্ড প্রদর্শন
true, // টুলটিপস
false // URL সমর্থন
);
// KeyListener দিয়ে কীবোর্ড ইনপুট হ্যান্ডল করা
chart.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_UP) {
System.out.println("Up arrow key pressed!");
} else if (keyCode == KeyEvent.VK_DOWN) {
System.out.println("Down arrow key pressed!");
}
}
});
// চার্ট প্যানেল তৈরি করা
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 600));
// JFrame এ চার্ট দেখানো
JFrame frame = new JFrame();
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
}
}
ব্যাখ্যা:
- KeyListener ব্যবহার করা হয়েছে যেখানে keyPressed মেথডে কীবোর্ডের ইনপুট ট্র্যাক করা হচ্ছে। এখানে, Up Arrow এবং Down Arrow কীগুলোর জন্য ইভেন্ট হ্যান্ডলিং করা হয়েছে।
সারসংক্ষেপ
JFreeChart-এ Custom Event Handling ব্যবহার করে আপনি চার্টের সাথে ইন্টারঅ্যাক্টিভ কার্যকলাপ পরিচালনা করতে পারেন, যেমন MouseListener, MouseMotionListener, এবং KeyListener এর মাধ্যমে মাউস ক্লিক, মাউস মুভমেন্ট, এবং কীবোর্ড ইনপুট ট্র্যাক করা। এগুলি ব্যবহারকারীকে চার্টের ডেটার সাথে আরও কার্যকরভাবে ইন্টারঅ্যাক্ট করতে সাহায্য করে, যেমন ডেটা রূপান্তর, ফিল্টারিং, বা এনিমেশন তৈরি করা।
Read more