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);
}
}
ব্যাখ্যা:
TextAreaতৈরি: দুটিJTextAreaতৈরি করা হয়েছে—একটি ড্র্যাগ করার জন্য (sourceArea) এবং অন্যটি ড্রপ করার জন্য (targetArea)।- ড্র্যাগ সক্ষম করা:
sourceArea.setDragEnabled(true);-sourceArea-তে ড্র্যাগ ফিচার সক্ষম করা হয়েছে।sourceArea.setTransferHandler(new TransferHandler("text"));-TransferHandlerব্যবহার করেtextডেটা টাইপের ড্র্যাগ করতে বলা হয়েছে।
- ড্রপ সক্ষম করা:
targetArea.setDropMode(DropMode.INSERT);-targetArea-তে ড্রপ করার জন্য মোড নির্ধারণ করা হয়েছে।targetArea.setTransferHandler(new TransferHandler("text") {...})-TransferHandler-এtextডেটা টাইপের জন্য কাস্টমimportDataএবংcanImportমেথড ব্যবহার করে ড্রপ অপারেশন কাস্টমাইজ করা হয়েছে।
- DataFlavor:
DataFlavor.stringFlavorব্যবহার করে আমরা নিশ্চিত করি যে ড্রপ অপারেশনে শুধুমাত্র টেক্সট ডেটা ড্রপ করা হবে।
আউটপুট:
- প্রথম
TextArea-তে কিছু টেক্সট থাকবে, যা আপনি ড্র্যাগ করে দ্বিতীয়TextArea-তে ড্রপ করতে পারবেন। - দ্বিতীয়
TextArea-তে ড্রপ করার পর প্রথমTextArea-এর টেক্সট চলে আসবে।
আরও কাস্টমাইজেশন:
- আপনি
DataFlavorব্যবহার করে ইমেজ, ফাইল বা অন্যান্য ডেটা ফরম্যাটের জন্য কাস্টম ফিল্টার করতে পারেন। - বিভিন্ন ড্র্যাগ এবং ড্রপ ইভেন্টগুলির জন্য কাস্টম
TransferHandlerতৈরি করতে পারেন।
এভাবে Drag-and-Drop অপারেশনটি কাস্টম ফাইল, টেক্সট বা অন্যান্য ডেটা স্থানান্তরের জন্য তৈরি করা যেতে পারে।
Read more