Dataset Change Event এবং Dynamic Chart Update

JFreeChart এর জন্য Event Handling - জেফ্রিচার্ট (JFreeChart) - Big Data and Analytics

376

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();
    }
}

ব্যাখ্যা:

  1. DatasetChangeListener যোগ করা হয়েছে, যা datasetChanged() মেথডের মাধ্যমে Dataset এর পরিবর্তন ট্র্যাক করে।
  2. Timer ব্যবহার করা হয়েছে, যা একটি নির্দিষ্ট সময় পর Dataset এ নতুন ডেটা যোগ করবে, এবং এটি DatasetChangeEvent ট্রিগার করবে।
  3. ডেটার পরিবর্তনের সাথে সাথে চার্টে পরিবর্তন দেখানো হবে।

২. 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 সেকেন্ডে নতুন ডেটা যোগ হবে
    }
}

ব্যাখ্যা:

  1. Timer ব্যবহার করা হয়েছে, যা প্রতি 1 সেকেন্ডে নতুন ডেটা যোগ করবে।
  2. DefaultCategoryDataset এ নতুন মান যোগ করা হচ্ছে এবং চার্টটি সেই ডেটা অনুযায়ী আপডেট হচ্ছে।
  3. 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 সেকেন্ডে নতুন ডেটা যোগ হবে
    }
}

ব্যাখ্যা:

  1. Real-time data যোগ করার জন্য Timer ব্যবহার করা হয়েছে, যা প্রতি 2 সেকেন্ডে নতুন ডেটা যোগ করবে।
  2. Math.random() ব্যবহার করে নতুন স্টক প্রাইস তৈরি করা হয়েছে, যা রিয়েল-টাইম ডেটার মতো আচরণ করবে।
  3. ChartPanel দিয়ে চার্টটি প্রতি 2 সেকেন্ডে আপডেট হবে।

সারসংক্ষেপ

JFreeChart-এ Dataset Change Event এবং Dynamic Chart Update এর মাধ্যমে আপনি চার্টের ডেটা পরিবর্তনের সাথে সাথে স্বয়ংক্রিয়ভাবে চার্ট আপডেট করতে পারেন। Dataset Change Event ব্যবহার করে ডেটার পরিবর্তন ট্র্যাক করা হয় এবং Dynamic Chart Update (যেমন real-time data updates) দিয়ে আপনি ডেটার পরিবর্তনের সাথে সাথে গ্রাফকে অটোমেটিক্যালি আপডেট করতে পারেন। এই পদ্ধতিগুলি ইন্টারঅ্যাকটিভ এবং লাইভ ডেটা ভিজুয়ালাইজেশন তৈরিতে কার্যকরী।

Content added By
Promotion

Are you sure to start over?

Loading...