জাভাতে ড্রাগ অ্যান্ড ড্রপ কৌশল
জাভাতে ড্রাগ অ্যান্ড ড্রপ কৌশল
জাভাতে ড্রাগ অ্যান্ড ড্রপ কৌশল কম্পিউটারের গ্রাফিকাল ইউজার ইন্টারফেসে ড্রাগ অ্যান্ড ড্রপ বলতে পয়েন্টিং ডিভাইস বা মাউসের সাহায্যে ব্যবহারকারী ভার্চুয়ালি একটি অবজেক্ট সিলেক্ট করে এবং তা ধরে টেনে নিয়ে নতুন একটি অবস্থানে অথবা অন্য একটি ভার্চুয়াল অবজেক্টের ওপর নেয়াকে বুঝায়।আজকের পর্বে ড্রাগ অ্যান্ড ড্রপ তৈরির একটি প্রোগ্রাম দেখানো হয়েছে। প্রোগ্রামে দুটি লিস্ট ব্যবহার করা হয়েছে। প্রথম লিস্ট থেকে পছন্দমতো স্থান নির্ধারণ করে মাউসের মাধ্যমে ড্রাগ করে দ্বিতীয় লিস্টে ছেড়ে দিলে ওই আইটেম বা স্থানটি দ্বিতীয় লিস্টেও আইটেম হিসেবে যোগ হবে। এভাবে ইচ্ছামতো স্থান সিলেক্ট করা যায়। প্রোগ্রামটি রান করার পদ্ধতি অন্যান্য জাভা প্রোগ্রামের মতোই। যথারীতি আমরা রান করার জন্য জাভার Jdk1.4 ভার্সন ব্যবহার করব এবং প্রোগ্রামগুলো D:\ ড্রাইভের java ফোল্ডারে সেভ করব।DragAndDrop.javaimportjava.awt.*;importjava.awt.event.*;importjava.awt.datatransfer.*;import java.io.*;importjava.util.*;importjavax.swing.*;importjavax.swing.border.*;importjavax.swing.event.*;public class DragAndDrop extends JFrame {publicDragAndDrop () {super("Locales List");Locale[] allLocales = Locale.getAvailableLocales();Locale[] selLocales = new Locale[0];TwoListsPanelpp = new TwoListsPanel(allLocales, "Available Locales",selLocales, "Selected Locales");getContentPane().add(pp, BorderLayout.CENTER);setResizable(false);pack();}public static void main(String argv[]) {DragAndDrop frame = new DragAndDrop ();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}classTwoListsPanel extends JPanel {public static final int LIST_WIDTH = 150;public static final int LIST_HEIGHT = 200;privatebooleanm_selectionChanged = false;privateMutableListm_leftList;privateMutableListm_rightList;publicTwoListsPanel(Object[] leftData, String leftTitle,Object[] rightData, String rightTitle) {super(new BorderLayout(10, 10));setBorder(new EmptyBorder(10, 10, 10, 10));m_leftList = new MutableList(leftData);m_leftList.setCellRenderer(new LocaleListRenderer());JScrollPanespl = new JScrollPane(m_leftList);JPanel p2l = new JPanel(new BorderLayout());p2l.setPreferredSize(new Dimension(LIST_WIDTH, LIST_HEIGHT));p2l.add(spl, BorderLayout.CENTER);p2l.add(new JLabel(leftTitle), BorderLayout.NORTH);add(p2l, BorderLayout.WEST);m_rightList = new MutableList(rightData);m_rightList.setCellRenderer(new LocaleListRenderer());JScrollPanespr = new JScrollPane(m_rightList);JPanel p2r = new JPanel(new BorderLayout());p2r.setPreferredSize(new Dimension(LIST_WIDTH, LIST_HEIGHT));p2r.add(spr, BorderLayout.CENTER);p2r.add(new JLabel(rightTitle), BorderLayout.NORTH);add(p2r, BorderLayout.EAST);JPanel p2c = new JPanel();p2c.setLayout(new BoxLayout(p2c, BoxLayout.Y_AXIS));p2c.add(Box.createVerticalGlue());p2c.add(Box.createVerticalGlue());add(p2c, BorderLayout.CENTER);}publicbooleanselectionChanged() {returnm_selectionChanged;}public void moveFromLeftToRight(Object obj) {if (obj == null) return;m_rightList.addElement(obj);}classLeftToRightMover implements ActionListener {public void actionPerformed(ActionEventevt) {Object[] values = m_leftList.getSelectedValues(); for (int k=0; k<values.length; k++) { m_rightList.addElement(values[k]); m_selectionChanged = true; } m_leftList.repaint(); m_rightList.repaint();}}classRightToLeftMover implements ActionListener {public void actionPerformed(ActionEventevt) {Object[] values = m_rightList.getSelectedValues();for (int k=0; k<values.length; k++) {m_leftList.addElement(values[k]);m_selectionChanged = true;}m_leftList.repaint();m_rightList.repaint();}}classLocaleListRenderer extends DefaultListCellRenderer {public Component getListCellRendererComponent(JList list,Object value, int index, booleanisSelected,booleancellHasFocus) {if (value instanceof Locale)value = ((Locale)value).getDisplayName();returnsuper.getListCellRendererComponent(list,value, index, isSelected, cellHasFocus);}}}classMutableList extends JList {privateDefaultListModelm_model;publicMutableList() {m_model = new DefaultListModel();setModel(m_model);installDnD();}publicMutableList(Object[] arr) {m_model = new DefaultListModel();for (int k=0; k<arr.length; k++)m_model.addElement(arr[k]);setModel(m_model);installDnD();}publicMutableList(Vector v) {m_model = new DefaultListModel();for (int k=0; k<v.size(); k++)m_model.addElement(v.elementAt(k));setModel(m_model);installDnD();}public void addElement(Object obj) {m_model.addElement(obj);repaint();}public Object[] getData() {returnm_model.toArray();}protected void installDnD() {setDragEnabled(true);setTransferHandler(new ListTransferHandler());DnDStarter starter = new DnDStarter();addMouseListener(starter);addMouseMotionListener(starter);}classDnDStarter extends MouseInputAdapter {public void mousePressed(MouseEvent e) {TransferHandlerth = MutableList.this.getTransferHandler();th.exportAsDrag(MutableList.this, e, TransferHandler.MOVE);}}}classArrayTransfer implements Transferable {public static DataFlavor FLAVOUR;static {try {FLAVOUR = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);}catch (Exception ex) {ex.printStackTrace();}}protectedJComponentm_source; protected Object[] m_arr;publicArrayTransfer(JComponent source, Object[] arr) {m_source = source;m_arr = arr;}public Object getTransferData(DataFlavor flavor)throwsUnsupportedFlavorException, IOException { if (!isDataFlavorSupported(flavor)) throw new UnsupportedFlavorException(flavor); return this;}publicbooleanisDataFlavorSupported(DataFlavor flavor) {returnFLAVOUR.equals(flavor); }publicDataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { FLAVOUR };}publicJComponentgetSource() {return m_source;}public Object[] getData() {return m_arr;}}classListTransferHandler extends TransferHandler {publicbooleanimportData(JComponent c, Transferable t) {if (!(c instanceofMutableList))return false;MutableList list = (MutableList)c;try {Object obj = t.getTransferData(ArrayTransfer.FLAVOUR);if (!(objinstanceofArrayTransfer))return false;ArrayTransfer at = (ArrayTransfer)obj; if (c.equals(at.getSource()))return false; Object[] arr = at.getData(); for (int k=0; k<arr.length; k++) list.addElement(arr[k]); } catch (Exception ex) { ex.printStackTrace(); return false; } return true; }publicbooleancanImport(JComponent c,DataFlavor[] transferFlavors) {if (!(c instanceofMutableList))return false;for (int k=0; k<transferFlavors.length; k++)if (transferFlavors[k].equals(ArrayTransfer.FLAVOUR))return true;return false;}publicintgetSourceActions(JComponent c) {if (!(c instanceofMutableList))return NONE;return COPY_OR_MOVE;}protected Transferable createTransferable(JComponent c) {if (!(c instanceofMutableList))return null;Object[] arr = ((JList)c).getSelectedValues();return new ArrayTransfer(c, arr);}protected void exportDone(JComponent source, Transferable t, int action) {if (!(source instanceofMutableList))return;MutableList list = (MutableList)source;if (!(action == COPY_OR_MOVE || action == MOVE))return;try {Object obj = t.getTransferData(ArrayTransfer.FLAVOUR);if (!(objinstanceofArrayTransfer))return;ArrayTransfer at = (ArrayTransfer)obj;if (!source.equals(at.getSource()))return;Object[] arr = at.getData();}catch (Exception ex) {ex.printStackTrace();}}}প্রোগ্রামে দুটি লিস্টের আইটেমগুলোকে একটি থেকে আরেকটিতে নেয়ার জন্য দুটি বাটন ব্যবহার করা যায়, যাতে মাউস ক্লিকের মাধ্যমেও আইটেমগুলোকে বাম পাশের লিস্ট থেকে ডান পাশের লিস্টে এবং ডান পাশের লিস্ট থেকে বাম পাশের লিস্টে স্থানান্তর করা যায়। আবার সিলেক্ট করা আইটেমগুলো লিস্টে ট্রান্সফার হওয়ার সাথে সাথে পূর্বেকার লিস্ট থেকে আইটেমটি বাদ দেয়া যায়।
আরও পড়ুন
মতামত দিন আপনার ইমেল প্রকাশিত হবে না।
আপনি লগ ইন অবস্থায় নেই।
আপনার মতামতটি দেওয়ার জন্য লগ ইন করুন।
যদি রেজিষ্ট্রেশন করা না থাকে প্রথমে রেজিষ্ট্রেশন করুন।
রিভিউ ( ০ / ৫ )
আপনি লগ ইন অবস্থায় নেই।
আপনার রিভিউ দেওয়ার জন্য লগ ইন করুন।
যদি রেজিষ্ট্রেশন করা না থাকে প্রথমে রেজিষ্ট্রেশন করুন।
০ টি মন্তব্য