Clipboard এবং Drag-and-Drop ব্যবস্থাপনা

এডাব্লিউটি (AWT) - Java Technologies

271

Java-এ AWT (Abstract Window Toolkit) ব্যবহার করে Clipboard এবং Drag-and-Drop ব্যবস্থাপনা খুবই গুরুত্বপূর্ণ এবং কার্যকর ফিচার। এই দুটি প্রযুক্তি ব্যবহারকারীদের ইন্টারফেসে বিভিন্ন ডেটা সহজে স্থানান্তর বা কপি/পেস্ট করার সুবিধা দেয়।

AWT Clipboard

Clipboard Java-এর একটি ক্লাস যা ডেটা স্থানান্তর করতে ব্যবহৃত হয়, যেমন কপি বা পেস্ট করতে। এটি সাধারণত টেক্সট, ছবি, বা অন্যান্য ধরনের ডেটা কপি এবং পেস্ট করার জন্য ব্যবহৃত হয়।

Clipboard ব্যবহারের জন্য উদাহরণ:

  1. ডেটা কপি করা (Copy to Clipboard):
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;

public class ClipboardExample {
    public static void main(String[] args) {
        String text = "Hello, this is copied to Clipboard!";

        // Clipboard এর জন্য একটি StringSelection অবজেক্ট তৈরি
        StringSelection selection = new StringSelection(text);

        // Clipboard এর বর্তমান সিস্টেমে ডেটা সেট করা
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        clipboard.setContents(selection, selection);

        System.out.println("Text has been copied to clipboard!");
    }
}
  1. ডেটা পেস্ট করা (Paste from Clipboard):
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;

public class ClipboardPasteExample {
    public static void main(String[] args) {
        try {
            // Clipboard থেকে ডেটা পড়া
            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
            Transferable content = clipboard.getContents(null);

            if (content != null && content.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                // স্ট্রিং ডেটা পেতে
                String data = (String) content.getTransferData(DataFlavor.stringFlavor);
                System.out.println("Pasted Text: " + data);
            }
        } catch (UnsupportedFlavorException | IOException e) {
            e.printStackTrace();
        }
    }
}

Clipboard এর বৈশিষ্ট্য:

  1. setContents(Transferable t, ClipboardOwner owner): ডেটা Clipboard-এ সেট করা।
  2. getContents(Object requestor): Clipboard থেকে ডেটা পড়া।

AWT Drag-and-Drop

Drag-and-Drop একটি কার্যকর ফিচার যা ব্যবহারকারীদের একটি এলিমেন্ট (যেমন, ফাইল, টেক্সট, ছবি) একটি অবস্থান থেকে অন্য অবস্থানে টেনে নিয়ে যাওয়ার সুবিধা দেয়। Java AWT এবং Swing এ Drag-and-Drop কার্যক্রম সহজেই বাস্তবায়ন করা যায়।

AWT Drag-and-Drop উদাহরণ:

এখানে একটি সাধারণ উদাহরণ দেয়া হলো, যেখানে একটি কম্পোনেন্ট ড্র্যাগ করা হয় এবং সেটি অন্য একটি প্যানেলে ড্রপ করা হয়।

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DragDropExample extends JFrame {
    public DragDropExample() {
        setTitle("AWT Drag-and-Drop Example");
        setSize(400, 300);
        setLayout(new FlowLayout());

        // ড্র্যাগ করা কম্পোনেন্ট (লেবেল)
        JLabel label = new JLabel("Drag Me!");
        label.setTransferHandler(new TransferHandler("text"));

        // ড্রপ টার্গেট (প্যানেল)
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(400, 200));
        panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        panel.setBackground(Color.WHITE);

        // ড্র্যাগ এবং ড্রপ ইভেন্ট হ্যান্ডলার সেট করা
        panel.setTransferHandler(new TransferHandler("text") {
            public boolean canImport(TransferSupport support) {
                return support.isDataFlavorSupported(DataFlavor.stringFlavor);
            }

            public boolean importData(TransferSupport support) {
                try {
                    String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);
                    label.setText(data);  // ড্রপ হওয়া ডেটা টেক্সট হিসাবে সেট করা
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                }
            }
        });

        // ড্র্যাগ শুরু করার জন্য ড্র্যাগ এবং ড্রপ ফিচার চালু করা
        label.setTransferHandler(new TransferHandler("text"));

        add(label);
        add(panel);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new DragDropExample();
    }
}

Drag-and-Drop ব্যবস্থাপনা:

  1. TransferHandler: এই ক্লাসটি ড্র্যাগ এবং ড্রপ অপারেশনগুলির জন্য ব্যবহৃত হয়।
    • setTransferHandler(TransferHandler handler): কম্পোনেন্টে ড্র্যাগ এবং ড্রপ সেট করে।
    • canImport(TransferSupport support): ড্রপ করার আগে চেক করা হয় যে ডেটা ধরনের সাথে ড্রপ করা যাবে কিনা।
    • importData(TransferSupport support): ডেটা ড্রপ করার পর তা প্রসেস করা।
  2. Transferable: ড্র্যাগ করা ডেটা বা অবজেক্টের প্রতিনিধিত্ব করে।
    • getTransferData(DataFlavor flavor): ডেটা প্রাপ্তি।
    • isDataFlavorSupported(DataFlavor flavor): নির্দিষ্ট ডেটা প্রকার সমর্থিত কিনা তা চেক করা।

AWT Clipboard এবং Drag-and-Drop ব্যবস্থাপনা Java GUI অ্যাপ্লিকেশনগুলোতে অনেক সুবিধা প্রদান করে। Clipboard ব্যবহার করে সহজেই ডেটা কপি-পেস্ট করা যায়, এবং Drag-and-Drop প্রযুক্তি ব্যবহারকারীদের জন্য উপাদান স্থানান্তর বা সরানোর প্রক্রিয়া সহজ করে দেয়। AWT-তে এই ফিচারগুলো কার্যকরভাবে ব্যবহারের জন্য TransferHandler এবং Clipboard ক্লাসগুলো ব্যবহৃত হয়।

Content added By

AWT (Abstract Window Toolkit) এ Clipboard ব্যবহার করে ডেটা ট্রান্সফার করা সম্ভব। Clipboard একটি সিস্টেমের অংশ যা ডেটা সাময়িকভাবে রাখে এবং বিভিন্ন অ্যাপ্লিকেশন বা প্রোগ্রামের মধ্যে শেয়ার করা যায়। এটি সাধারণত কপি-পেস্ট অপারেশনের জন্য ব্যবহৃত হয়।

AWT তে Clipboard ব্যবহারের জন্য Clipboard ক্লাস এবং Transferable ইন্টারফেস ব্যবহার করা হয়।

১. Clipboard Access এবং Data Transfer

১.১. Clipboard ক্লাসের মূল বৈশিষ্ট্য

AWT এ Clipboard ক্লাসটি সিস্টেমের ক্লিপবোর্ডে ডেটা পড়া ও লেখার জন্য ব্যবহৃত হয়। এটি Toolkit এর মাধ্যমে অ্যাক্সেস করা হয়।

২. Clipboard ব্যবহার করার প্রাথমিক ধাপ

  1. ডেটা কপি করা (Put Data on Clipboard) – ডেটা ক্লিপবোর্ডে লেখার জন্য setContents() মেথড ব্যবহার করা হয়।
  2. ডেটা পেস্ট করা (Get Data from Clipboard) – ক্লিপবোর্ড থেকে ডেটা পড়তে getContents() মেথড ব্যবহার করা হয়।

AWT Clipboard ব্যবহারের জন্য Transferable ইন্টারফেস এবং DataFlavor ক্লাসও ব্যবহার করা হয়।

৩. ডেটা কপি ও পেস্ট করার উদাহরণ

৩.১. ডেটা কপি করা (Put Data on Clipboard)

এখানে একটি উদাহরণ দেয়া হয়েছে, যেখানে একটি স্ট্রিং ক্লিপবোর্ডে কপি করা হচ্ছে।

import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;

public class ClipboardExample {
    public static void main(String[] args) {
        String data = "Hello, Clipboard!";  // কপি করা ডেটা

        // ক্লিপবোর্ডে ডেটা রাখার জন্য Transferable অবজেক্ট তৈরি
        StringSelection stringSelection = new StringSelection(data);

        // ক্লিপবোর্ডে ডেটা সেট করা
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Clipboard clipboard = toolkit.getSystemClipboard();
        clipboard.setContents(stringSelection, null);

        System.out.println("Data copied to clipboard: " + data);
    }
}

ব্যাখ্যা:

  • StringSelection ক্লাস Transferable ইন্টারফেসের একটি বাস্তবায়ন, যা স্ট্রিং ডেটাকে ক্লিপবোর্ডে রাখতে ব্যবহৃত হয়।
  • setContents() মেথডের মাধ্যমে ক্লিপবোর্ডে ডেটা কপি করা হয়।

৩.২. ডেটা পেস্ট করা (Get Data from Clipboard)

এখানে একটি উদাহরণ দেয়া হয়েছে, যেখানে ক্লিপবোর্ড থেকে ডেটা পেস্ট করা হচ্ছে।

import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;

public class ClipboardExample {
    public static void main(String[] args) {
        try {
            // ক্লিপবোর্ড থেকে ডেটা পড়া
            Toolkit toolkit = Toolkit.getDefaultToolkit();
            Clipboard clipboard = toolkit.getSystemClipboard();
            Transferable contents = clipboard.getContents(null);

            // ডেটা যদি স্ট্রিং হয় তবে সেটি পড়ে দেখানো
            if (contents != null && contents.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                String data = (String) contents.getTransferData(DataFlavor.stringFlavor);
                System.out.println("Data retrieved from clipboard: " + data);
            } else {
                System.out.println("No string data found on clipboard.");
            }
        } catch (UnsupportedFlavorException | IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • getContents() মেথডের মাধ্যমে ক্লিপবোর্ড থেকে ডেটা পাওয়া যায়।
  • isDataFlavorSupported() মেথডের মাধ্যমে ক্লিপবোর্ডে যে ধরনের ডেটা রয়েছে তা যাচাই করা হয়।
  • getTransferData() মেথডের মাধ্যমে নির্দিষ্ট ডেটা প্রকার থেকে ডেটা পাওয়া যায়।

৪. বিভিন্ন ডেটা ফ্লেভার (DataFlavor)

AWT এ DataFlavor একটি ক্লাস যা ডেটার ধরনের (যেমন, টেক্সট, ইমেজ ইত্যাদি) প্রতিনিধিত্ব করে। কিছু প্রচলিত DataFlavor:

  • DataFlavor.stringFlavor – স্ট্রিং ডেটা।
  • DataFlavor.imageFlavor – ইমেজ ডেটা।
  • DataFlavor.javaFileListFlavor – ফাইল তালিকা ডেটা।

৫. উদাহরণ: ফাইল কপি এবং পেস্ট

ক্লিপবোর্ডে ফাইল তালিকা কপি করার উদাহরণ:

import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
import java.util.*;

public class ClipboardFileExample {
    public static void main(String[] args) {
        // ফাইলের তালিকা তৈরি
        List<File> files = new ArrayList<>();
        files.add(new File("test1.txt"));
        files.add(new File("test2.txt"));

        // ফাইল তালিকা ক্লিপবোর্ডে কপি করা
        FileListSelection fileListSelection = new FileListSelection(files);
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Clipboard clipboard = toolkit.getSystemClipboard();
        clipboard.setContents(fileListSelection, null);

        System.out.println("File list copied to clipboard.");
    }
}

class FileListSelection implements Transferable {
    private List<File> files;
    public static DataFlavor fileListFlavor = DataFlavor.javaFileListFlavor;

    public FileListSelection(List<File> files) {
        this.files = files;
    }

    public DataFlavor[] getTransferDataFlavors() {
        return new DataFlavor[] { fileListFlavor };
    }

    public boolean isDataFlavorSupported(DataFlavor flavor) {
        return fileListFlavor.equals(flavor);
    }

    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
        if (fileListFlavor.equals(flavor)) {
            return files;
        }
        throw new UnsupportedFlavorException(flavor);
    }
}

৬. গুরুত্বপূর্ণ ক্লাস এবং মেথড

  • Clipboard: ক্লিপবোর্ডে ডেটা রাখতে এবং পড়তে ব্যবহৃত হয়।
  • Transferable: ডেটা স্থানান্তরের জন্য ব্যবহৃত ইন্টারফেস।
  • StringSelection: স্ট্রিং ডেটা স্থানান্তরের জন্য Transferable ইন্টারফেসের একটি বাস্তবায়ন।
  • DataFlavor: ডেটা ধরনের প্রতিনিধিত্ব করে।

AWT এর ক্লিপবোর্ড অ্যাক্সেস এবং ডেটা ট্রান্সফার ব্যবহারের মাধ্যমে আপনি কপি-পেস্ট অপারেশন বা অন্য কোনো ডেটা স্থানান্তরের কাজ করতে পারেন।

Content added By

AWT (Abstract Window Toolkit) ব্যবহার করে Text এবং Image এর জন্য Copy-Paste functionality তৈরি করার জন্য নিচে একটি উদাহরণ দেয়া হয়েছে। এখানে আমরা TextArea এবং Canvas (Image দেখানোর জন্য) ব্যবহার করেছি, এবং তাদের মধ্যে Copy-Paste ফাংশনালিটি যোগ করা হয়েছে।

উদাহরণ কোড:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class CopyPasteExample {
    public static void main(String[] args) {
        // Frame তৈরি
        Frame frame = new Frame("AWT Copy-Paste Functionality");
        frame.setSize(600, 600);
        frame.setLayout(new FlowLayout());

        // Text Area তৈরি (Text Copy-Paste এর জন্য)
        TextArea textArea = new TextArea(10, 50);
        frame.add(textArea);

        // Button to Copy Text
        Button copyTextButton = new Button("Copy Text");
        frame.add(copyTextButton);

        // Button to Paste Text
        Button pasteTextButton = new Button("Paste Text");
        frame.add(pasteTextButton);

        // Button to Copy Image
        Button copyImageButton = new Button("Copy Image");
        frame.add(copyImageButton);

        // Canvas for displaying Image (Image Copy-Paste এর জন্য)
        Canvas imageCanvas = new Canvas() {
            public void paint(Graphics g) {
                Image img = Toolkit.getDefaultToolkit().getImage("image.jpg"); // Image path
                g.drawImage(img, 0, 0, this);
            }
        };
        imageCanvas.setSize(200, 200);
        frame.add(imageCanvas);

        // Clipboard object to store and retrieve clipboard data
        final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

        // Copy Text functionality
        copyTextButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String textToCopy = textArea.getText();
                StringSelection selection = new StringSelection(textToCopy);
                clipboard.setContents(selection, null);
            }
        });

        // Paste Text functionality
        pasteTextButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    Transferable content = clipboard.getContents(null);
                    if (content != null && content.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                        String text = (String) content.getTransferData(DataFlavor.stringFlavor);
                        textArea.setText(text);
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });

        // Copy Image functionality (Image from Canvas)
        copyImageButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Image image = Toolkit.getDefaultToolkit().getImage("image.jpg"); // Image path
                ImageTransferable imageTransferable = new ImageTransferable(image);
                clipboard.setContents(imageTransferable, null);
            }
        });

        // Frame close operation
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                frame.dispose();
            }
        });

        // Frame Visible করা
        frame.setVisible(true);
    }
}

// Image Transferable class for handling image data
class ImageTransferable implements Transferable {
    private Image image;

    public ImageTransferable(Image image) {
        this.image = image;
    }

    public DataFlavor[] getTransferDataFlavors() {
        return new DataFlavor[]{DataFlavor.imageFlavor};
    }

    public boolean isDataFlavorSupported(DataFlavor flavor) {
        return flavor.equals(DataFlavor.imageFlavor);
    }

    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        if (flavor.equals(DataFlavor.imageFlavor)) {
            return image;
        } else {
            throw new UnsupportedFlavorException(flavor);
        }
    }
}

কোড ব্যাখ্যা:

  1. Text Area:
    • TextArea ব্যবহার করা হয়েছে যেখানে ব্যবহারকারী টেক্সট লিখতে এবং কপি-পেস্ট করতে পারবেন।
  2. Canvas (Image):
    • Canvas ব্যবহার করা হয়েছে যেখানে একটি ছবি প্রদর্শন করা হবে (এই ক্ষেত্রে "image.jpg" নামক একটি ইমেজ ব্যবহার করা হয়েছে, তবে আপনি আপনার ইমেজের পাথ এখানে দিতে পারেন)।
  3. Copy and Paste Functionality:
    • Copy Text: StringSelection ক্লাস ব্যবহার করে টেক্সট কপি করা হচ্ছে এবং সেটি ক্লিপবোর্ডে সংরক্ষণ করা হচ্ছে।
    • Paste Text: ক্লিপবোর্ড থেকে টেক্সট ফিরিয়ে এনে TextArea-তে পেস্ট করা হচ্ছে।
    • Copy Image: ImageTransferable ক্লাস ব্যবহার করে ইমেজ কপি করা হচ্ছে। এর মাধ্যমে একটি ইমেজ ক্লিপবোর্ডে কপি করা যায়।
  4. Clipboard:
    • Toolkit.getDefaultToolkit().getSystemClipboard() ব্যবহার করে ক্লিপবোর্ডের মধ্যে কনটেন্ট রাখা এবং বের করা হচ্ছে।
  5. ImageTransferable Class:
    • ইমেজ ক্লিপবোর্ডে কপি করার জন্য একটি কাস্টম Transferable ক্লাস তৈরি করা হয়েছে যেটি ইমেজ কনটেন্ট হ্যান্ডল করে।

আউটপুট:

  • একটি GUI উইন্ডো তৈরি হবে যেখানে TextArea, Copy Text, Paste Text, Copy Image বাটন থাকবে।
  • Copy Text বাটন ক্লিক করলে টেক্সট ক্লিপবোর্ডে কপি হবে এবং Paste Text বাটন ক্লিক করলে সেই টেক্সট TextArea তে পেস্ট হবে।
  • Copy Image বাটন ক্লিক করলে নির্দিষ্ট ইমেজ ক্লিপবোর্ডে কপি হবে।

এটি AWT ব্যবহার করে Text এবং Image এর জন্য Copy-Paste ফাংশনালিটি তৈরি করার একটি উদাহরণ।

Content added By

AWT (Abstract Window Toolkit)-এ Drag-and-Drop অপারেশন প্রক্রিয়া ব্যবহার করতে হলে, আপনাকে DataFlavor এবং TransferHandler ক্লাসের সাহায্য নিতে হবে। Drag-and-Drop এক ধরনের ইউজার ইন্টারঅ্যাকশন, যেখানে একটি কম্পোনেন্ট থেকে অন্য কম্পোনেন্টে ডেটা "ড্র্যাগ" এবং "ড্রপ" করা হয়। এটির জন্য DataFlavor এবং TransferHandler ব্যবহৃত হয় ডেটার ফরম্যাট সংজ্ঞায়িত করতে এবং ডেটা স্থানান্তরের জন্য।

১. DataFlavor:

DataFlavor ক্লাস ডেটার ধরন (ফরম্যাট) নির্ধারণ করতে ব্যবহৃত হয়, যা ড্র্যাগ-এন্ড-ড্রপ অপারেশনে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এর মাধ্যমে আপনি নির্দিষ্ট ডেটা ফরম্যাট চিহ্নিত করতে পারেন, যেমন String, Image, অথবা Text ইত্যাদি।

২. TransferHandler:

TransferHandler ক্লাস ড্র্যাগ এবং ড্রপ অ্যাকশন পরিচালনা করে। এটি ডেটার উৎস এবং গন্তব্য (source and target) সংযুক্ত করে এবং ডেটা স্থানান্তরের জন্য বিভিন্ন মেথড সরবরাহ করে।

উদাহরণ: Drag-and-Drop ব্যবহার করে Text Transfer করা

এখানে একটি উদাহরণ দেওয়া হলো, যেখানে একটি TextArea থেকে টেক্সট ড্র্যাগ করা হয় এবং অন্য একটি TextArea-তে ড্রপ করা হয়:

import java.awt.*;
import javax.swing.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.io.*;

public class DragAndDropExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Drag and Drop Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);

        // দুইটি TextArea তৈরি
        JTextArea sourceArea = new JTextArea("Drag this text!", 10, 20);
        JTextArea targetArea = new JTextArea("Drop the text here.", 10, 20);

        // Source text area (dragging)
        sourceArea.setDragEnabled(true);  // এই টেক্সট অ্যারেটি ড্র্যাগ করার জন্য প্রস্তুত
        sourceArea.setTransferHandler(new TransferHandler("text"));  // ডেটা হ্যান্ডলিং সেট করা

        // Target text area (dropping)
        targetArea.setDropMode(DropMode.INSERT);
        targetArea.setTransferHandler(new TransferHandler("text") {
            // Override to handle drop event
            public boolean canImport(TransferHandler.TransferSupport support) {
                return support.isDataFlavorSupported(DataFlavor.stringFlavor);
            }

            public boolean importData(TransferHandler.TransferSupport support) {
                if (!canImport(support)) {
                    return false;
                }
                try {
                    // Dropped data import
                    String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);
                    targetArea.append(data);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                }
            }
        });

        // JScrollPane এবং TextAreas যোগ করা
        JScrollPane sourceScroll = new JScrollPane(sourceArea);
        JScrollPane targetScroll = new JScrollPane(targetArea);
        
        // Frame-এ কম্পোনেন্ট যোগ করা
        frame.setLayout(new GridLayout(2, 1));
        frame.add(sourceScroll);
        frame.add(targetScroll);

        // Frame দৃশ্যমান করা
        frame.setVisible(true);
    }
}

ব্যাখ্যা:

  1. TextArea তৈরি: দুটি JTextArea তৈরি করা হয়েছে—একটি ড্র্যাগ করার জন্য (sourceArea) এবং অন্যটি ড্রপ করার জন্য (targetArea)।
  2. ড্র্যাগ সক্ষম করা:
    • sourceArea.setDragEnabled(true); - sourceArea-তে ড্র্যাগ ফিচার সক্ষম করা হয়েছে।
    • sourceArea.setTransferHandler(new TransferHandler("text")); - TransferHandler ব্যবহার করে text ডেটা টাইপের ড্র্যাগ করতে বলা হয়েছে।
  3. ড্রপ সক্ষম করা:
    • targetArea.setDropMode(DropMode.INSERT); - targetArea-তে ড্রপ করার জন্য মোড নির্ধারণ করা হয়েছে।
    • targetArea.setTransferHandler(new TransferHandler("text") {...}) - TransferHandler-এ text ডেটা টাইপের জন্য কাস্টম importData এবং canImport মেথড ব্যবহার করে ড্রপ অপারেশন কাস্টমাইজ করা হয়েছে।
  4. DataFlavor: DataFlavor.stringFlavor ব্যবহার করে আমরা নিশ্চিত করি যে ড্রপ অপারেশনে শুধুমাত্র টেক্সট ডেটা ড্রপ করা হবে।

আউটপুট:

  • প্রথম TextArea-তে কিছু টেক্সট থাকবে, যা আপনি ড্র্যাগ করে দ্বিতীয় TextArea-তে ড্রপ করতে পারবেন।
  • দ্বিতীয় TextArea-তে ড্রপ করার পর প্রথম TextArea-এর টেক্সট চলে আসবে।

আরও কাস্টমাইজেশন:

  • আপনি DataFlavor ব্যবহার করে ইমেজ, ফাইল বা অন্যান্য ডেটা ফরম্যাটের জন্য কাস্টম ফিল্টার করতে পারেন।
  • বিভিন্ন ড্র্যাগ এবং ড্রপ ইভেন্টগুলির জন্য কাস্টম TransferHandler তৈরি করতে পারেন।

এভাবে Drag-and-Drop অপারেশনটি কাস্টম ফাইল, টেক্সট বা অন্যান্য ডেটা স্থানান্তরের জন্য তৈরি করা যেতে পারে।

Content added By

AWT (Abstract Window Toolkit) ব্যবহার করে Custom Data Transfer এবং Clipboard Operations পরিচালনা করা যায়। AWT ক্লিপবোর্ড এবং ডাটা ট্রান্সফারের জন্য Clipboard, Transferable, ClipboardOwner ইন্টারফেস এবং বিভিন্ন ক্লাস প্রদান করে, যার মাধ্যমে আপনি টেক্সট বা অন্য কাস্টম ডেটা ক্লিপবোর্ডে কপি, পেস্ট এবং কাটা অপারেশন করতে পারেন।

AWT ক্লিপবোর্ড অপারেশন

AWT ক্লিপবোর্ডের মাধ্যমে ডেটা কপি এবং পেস্ট করার জন্য Clipboard এবং Transferable ক্লাস ব্যবহার করা হয়। ক্লিপবোর্ডের অপারেশন যেমন কপি, কাট, পেস্ট এবং ক্লিপবোর্ডের কন্টেন্ট রিট্রিভ করা সহজেই করা যায়।

ক্লিপবোর্ডে ডেটা কপি করা (Copy Data to Clipboard)

import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import java.io.*;

public class ClipboardExample extends Frame {
    private TextArea textArea;

    public ClipboardExample() {
        setTitle("Clipboard Operations Example");
        setSize(400, 300);
        setLayout(new BorderLayout());

        // TextArea to enter data
        textArea = new TextArea();
        add(textArea, BorderLayout.CENTER);

        // Button to copy data to clipboard
        Button copyButton = new Button("Copy to Clipboard");
        copyButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String text = textArea.getText();  // Get the text from TextArea

                // Create a string selection object with the text to be copied
                StringSelection stringSelection = new StringSelection(text);
                
                // Get system clipboard
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

                // Set the string selection to clipboard
                clipboard.setContents(stringSelection, null);
                System.out.println("Text copied to clipboard!");
            }
        });

        add(copyButton, BorderLayout.SOUTH);
        setVisible(true);
    }

    public static void main(String[] args) {
        new ClipboardExample();
    }
}

এখানে কী হচ্ছে:

  1. একটি TextArea তৈরি করা হয়েছে যেখানে ব্যবহারকারী টেক্সট ইনপুট দিতে পারেন।
  2. একটি Button ক্লিক করলে StringSelection ব্যবহার করে টেক্সট ক্লিপবোর্ডে কপি করা হচ্ছে।
  3. Clipboard ক্লাসের মাধ্যমে ক্লিপবোর্ডের কন্টেন্ট সেট করা হচ্ছে।

ক্লিপবোর্ড থেকে ডেটা পেস্ট করা (Paste Data from Clipboard)

import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;

public class ClipboardPasteExample extends Frame {
    private TextArea textArea;

    public ClipboardPasteExample() {
        setTitle("Clipboard Paste Example");
        setSize(400, 300);
        setLayout(new BorderLayout());

        // TextArea to paste data
        textArea = new TextArea();
        add(textArea, BorderLayout.CENTER);

        // Button to paste data from clipboard
        Button pasteButton = new Button("Paste from Clipboard");
        pasteButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    // Get system clipboard
                    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                    
                    // Get the content from the clipboard
                    Transferable content = clipboard.getContents(null);
                    
                    if (content != null && content.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                        // If the content is a string, get the string
                        String text = (String) content.getTransferData(DataFlavor.stringFlavor);
                        textArea.setText(text);  // Paste the text into the TextArea
                    }
                } catch (UnsupportedFlavorException | IOException ex) {
                    System.out.println("Error reading from clipboard: " + ex.getMessage());
                }
            }
        });

        add(pasteButton, BorderLayout.SOUTH);
        setVisible(true);
    }

    public static void main(String[] args) {
        new ClipboardPasteExample();
    }
}

এখানে কী হচ্ছে:

  1. একটি TextArea তৈরি করা হয়েছে যাতে ক্লিপবোর্ডের টেক্সট পেস্ট করা যাবে।
  2. Button ক্লিক করলে ক্লিপবোর্ড থেকে টেক্সট পেস্ট করা হয়।
  3. Transferable ইন্টারফেসের মাধ্যমে ক্লিপবোর্ডের কন্টেন্ট পেতে পারি, এবং DataFlavor.stringFlavor ব্যবহার করে শুধুমাত্র টেক্সট ডেটা পেস্ট করা হচ্ছে।

কাস্টম ডেটা ট্রান্সফার (Custom Data Transfer)

AWT এর মাধ্যমে আপনি কাস্টম ডেটা ট্রান্সফারও করতে পারেন, যেমন ফাইল, ইমেজ বা কাস্টম অবজেক্ট। কাস্টম ডেটা ট্রান্সফার করতে হলে, আপনাকে Transferable ইন্টারফেস ইমপ্লিমেন্ট করতে হবে।

কাস্টম ডেটা ট্রান্সফার উদাহরণ (Transfer Custom Data)

import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
import java.io.*;

public class CustomDataTransferExample extends Frame {
    private TextArea textArea;

    public CustomDataTransferExample() {
        setTitle("Custom Data Transfer Example");
        setSize(400, 300);
        setLayout(new BorderLayout());

        // TextArea to input custom data
        textArea = new TextArea();
        add(textArea, BorderLayout.CENTER);

        // Button to transfer custom data
        Button transferButton = new Button("Transfer Custom Data");
        transferButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String customData = "Custom Data Example";  // Custom data to transfer

                // Create a custom Transferable object
                CustomTransferable customTransferable = new CustomTransferable(customData);
                
                // Get system clipboard
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

                // Set the custom Transferable object to clipboard
                clipboard.setContents(customTransferable, null);
                System.out.println("Custom Data transferred to clipboard!");
            }
        });

        add(transferButton, BorderLayout.SOUTH);
        setVisible(true);
    }

    public static void main(String[] args) {
        new CustomDataTransferExample();
    }

    // Custom Transferable implementation
    class CustomTransferable implements Transferable {
        private String data;

        public CustomTransferable(String data) {
            this.data = data;
        }

        public DataFlavor[] getTransferDataFlavors() {
            return new DataFlavor[]{DataFlavor.stringFlavor};  // Only support string data
        }

        public boolean isDataFlavorSupported(DataFlavor flavor) {
            return flavor.equals(DataFlavor.stringFlavor);  // Support only string flavor
        }

        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
            if (isDataFlavorSupported(flavor)) {
                return data;  // Return the custom data
            }
            throw new UnsupportedFlavorException(flavor);
        }
    }
}

এখানে কী হচ্ছে:

  1. CustomTransferable ক্লাস তৈরি করা হয়েছে যা Transferable ইন্টারফেস ইমপ্লিমেন্ট করে এবং কাস্টম ডেটা ট্রান্সফার করার জন্য ব্যবহৃত হয়।
  2. Clipboard এর মাধ্যমে কাস্টম ডেটা ক্লিপবোর্ডে স্থানান্তর করা হয়েছে।
  3. কাস্টম ডেটা হিসেবে একটি সাধারণ স্ট্রিং Custom Data Example ট্রান্সফার করা হচ্ছে।

টিপস এবং ট্রিকস:

  1. Multiple Data Types: যদি একাধিক ডেটা টাইপ (যেমন, টেক্সট, ছবি, বা ফাইল) ক্লিপবোর্ডে স্টোর করতে চান, তবে DataFlavor কাস্টমাইজ করা যেতে পারে।
  2. ClipboardOwner: আপনি যদি ক্লিপবোর্ডের মালিক হতে চান, তাহলে ClipboardOwner ইন্টারফেস ইমপ্লিমেন্ট করতে পারেন। এটি আপনাকে ক্লিপবোর্ডের কন্টেন্ট পরিবর্তন হলে নোটিফাই করবে।

এভাবে AWT ব্যবহার করে আপনি কাস্টম ডেটা ট্রান্সফার এবং ক্লিপবোর্ড অপারেশন করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...