JFreeChart একটি শক্তিশালী Java লাইব্রেরি যা ডেটা ভিজুয়ালাইজেশনের জন্য ব্যবহৃত হয়, এবং এর মাধ্যমে আপনি dynamic data প্রদর্শন করতে পারেন, বিশেষ করে যখন ডেটা ওয়েব সার্ভিস বা API থেকে আসছে। ডেটা সংগ্রহ এবং সেটি চার্টে প্রদর্শন করার জন্য, আপনি RESTful API, JSON, বা XML ফরম্যাট থেকে ডেটা ফেচ করতে পারেন এবং সেটি JFreeChart দিয়ে ভিজ্যুয়ালাইজ করতে পারেন।
এখানে JFreeChart ব্যবহার করে Web Services এবং API থেকে Dynamic Data কিভাবে ফেচ করা যায়, তা নিয়ে আলোচনা করা হবে।
১. Web Services বা API থেকে Data Fetch করা
API বা Web Service থেকে ডেটা ফেচ করার জন্য সাধারণত Java HTTPClient ব্যবহার করা হয়। আপনি REST API বা SOAP API ব্যবহার করে ডেটা ফেচ করতে পারেন। অধিকাংশ ওয়েব সার্ভিস JSON বা XML ফরম্যাটে ডেটা প্রদান করে, এবং সেই ডেটা জাভা অ্যাপ্লিকেশনে HTTPClient ব্যবহার করে আনা হয়।
উদাহরণ: REST API থেকে JSON ডেটা Fetch করা
ধরা যাক, একটি REST API আছে যা JSON ফরম্যাটে ডেটা প্রদান করছে। API থেকে ডেটা ফেচ করার পর সেটিকে JFreeChart-এ ডেটা হিসেবে ব্যবহার করা হবে।
১.১. HTTP Request পাঠানো এবং JSON ডেটা ফেচ করা
import org.json.JSONArray;
import org.json.JSONObject;
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.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class APIDataChartExample {
public static void main(String[] args) {
// API URL
String apiUrl = "https://api.example.com/data"; // উদাহরণস্বরূপ API URL
// HTTP GET Request
try {
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// JSON ডেটা ফেচ করা
InputStreamReader reader = new InputStreamReader(connection.getInputStream());
StringBuilder response = new StringBuilder();
int data = reader.read();
while (data != -1) {
response.append((char) data);
data = reader.read();
}
// JSON রেসপন্স প্রক্রিয়া করা
JSONObject jsonResponse = new JSONObject(response.toString());
JSONArray dataPoints = jsonResponse.getJSONArray("data"); // API থেকে আসা ডেটা
// ডেটাসেট তৈরি করা
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < dataPoints.length(); i++) {
JSONObject dataPoint = dataPoints.getJSONObject(i);
String category = dataPoint.getString("category");
double value = dataPoint.getDouble("value");
// ডেটা যুক্ত করা
dataset.addValue(value, "Value", category);
}
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Dynamic Data from API", // Chart Title
"Category", // X-Axis Label
"Value", // Y-Axis Label
dataset // Dataset
);
// চার্ট প্যানেল তৈরি এবং 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);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- API Request:
HttpURLConnectionব্যবহার করে API থেকে GET রিকোয়েস্ট পাঠানো হয়েছে। - JSON Parsing:
JSONObjectএবংJSONArrayব্যবহার করে API থেকে প্রাপ্ত JSON ডেটা প্রক্রিয়া করা হয়েছে। - Dataset: JSON ডেটা থেকে ডেটাসেট তৈরি করা হয়েছে যা JFreeChart ব্যবহার করে চার্টে প্রদর্শন করা হবে।
২. API Response ব্যবহার করে Dynamic Chart তৈরি করা
উপরের উদাহরণে, JSON ডেটা API থেকে ফেচ করা হয়েছে এবং সেটি Bar Chart-এ প্রদর্শিত হয়েছে। আপনি একইভাবে Line Chart, Pie Chart অথবা অন্যান্য ধরনের চার্টেও এই ডেটা ব্যবহার করতে পারেন।
উদাহরণ: Line Chart (Dynamic Data) থেকে ডেটা ফেচ করা
import org.json.JSONArray;
import org.json.JSONObject;
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.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class DynamicLineChartExample {
public static void main(String[] args) {
// API URL
String apiUrl = "https://api.example.com/lineData"; // উদাহরণস্বরূপ API URL
// HTTP GET Request
try {
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// JSON ডেটা ফেচ করা
InputStreamReader reader = new InputStreamReader(connection.getInputStream());
StringBuilder response = new StringBuilder();
int data = reader.read();
while (data != -1) {
response.append((char) data);
data = reader.read();
}
// JSON রেসপন্স প্রক্রিয়া করা
JSONObject jsonResponse = new JSONObject(response.toString());
JSONArray dataPoints = jsonResponse.getJSONArray("data");
// XYSeries তৈরি করা
XYSeries series = new XYSeries("Data Points");
for (int i = 0; i < dataPoints.length(); i++) {
JSONObject dataPoint = dataPoints.getJSONObject(i);
double xValue = dataPoint.getDouble("xValue");
double yValue = dataPoint.getDouble("yValue");
series.add(xValue, yValue);
}
// Dataset তৈরি করা
XYSeriesCollection dataset = new XYSeriesCollection(series);
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createXYLineChart(
"Dynamic Line Chart", // Chart Title
"X-Axis", // X-Axis Label
"Y-Axis", // Y-Axis Label
dataset // Dataset
);
// চার্ট প্যানেল তৈরি এবং 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);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- Line Chart: এখানে Line Chart তৈরি করা হয়েছে, যেখানে XYSeries এবং XYSeriesCollection ব্যবহার করে ডেটা পয়েন্টগুলোকে সংরক্ষণ এবং প্লট করা হয়েছে।
- Dynamic Data: API থেকে ফেচ করা xValue এবং yValue দ্বারা একটি ডাইনামিক লাইন চার্ট তৈরি করা হয়েছে।
৩. XML Web Service থেকে Data Fetch করা
এছাড়াও, আপনি XML Web Services ব্যবহার করে ডেটা ফেচ করতে পারেন। এই ক্ষেত্রে, JAXP বা DOM/SAX পার্সিং ব্যবহার করা যেতে পারে।
উদাহরণ: XML থেকে ডেটা ফেচ করা
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.swing.*;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class XMLDataFetchExample {
public static void main(String[] args) {
String apiUrl = "https://api.example.com/data.xml"; // XML API URL
try {
// HTTP GET Request to fetch XML
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// XML Parsing
InputStream inputStream = connection.getInputStream();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(inputStream);
// XML ডেটা প্রক্রিয়া করা
NodeList nodeList = doc.getElementsByTagName("dataPoint");
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < nodeList.getLength(); i++) {
String category = doc.getElementsByTagName("category").item(i).getTextContent();
String value = doc.getElementsByTagName("value").item(i).getTextContent();
dataset.addValue(Double.parseDouble(value), "Value", category);
}
// চার্ট তৈরি করা
JFreeChart chart = ChartFactory.createBarChart(
"Sales Data from XML", // Chart 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 frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(chartPanel);
frame.pack();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- XML Parsing: JAXP বা DOM পার্সিং ব্যবহার করে XML থেকে ডেটা ফেচ করা হয়েছে এবং তারপরে JFreeChart-এ Bar Chart হিসেবে প্রদর্শন করা হয়েছে।
সারসংক্ষেপ
JFreeChart দিয়ে Web Services এবং API থেকে Dynamic Data ফেচ করা সম্ভব, যা আপনাকে লাইভ ডেটা ব্যবহার করে চার্ট তৈরি করতে সাহায্য করবে। আপনি RESTful APIs থেকে JSON ডেটা ফেচ করতে পারেন,
অথবা SOAP APIs থেকে XML ডেটা নিয়ে তা জাভা অ্যাপ্লিকেশনে প্লট করতে পারেন। এভাবে, আপনি JFreeChart ব্যবহার করে বিভিন্ন ধরনের ডেটা ভিজুয়ালাইজেশন সিস্টেম তৈরি করতে পারেন যা স্বয়ংক্রিয়ভাবে পরিবর্তিত বা আপডেট হওয়া ডেটা প্রদর্শন করবে।
Read more