الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مثال عن الـ Drag & Drop في الجافا ... روعة

بدأه المشاكـس5550 في 1 نوفمبر 2012 · 5 رد · 772 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لقد قرأت منذ مدة في هذا المنتدى 'من طرف أحد الاعضاء' ان الجافا لا تدعم تقنية الـ Drag & Drop :sad: ، وقتها حزنت كثيييييرا :blush: كونها تعد من أفضل التقنيات التي أحبها وأحب استعمالها :sleep: ... الى أن عثرت على مثال في أحد المواقع 'لا أتذكره كوني كثييير التجوال هنا وهناك' وهو مثال وااايد حلو لكني لم افهمه بصورة كاملة ولكن ومع ذلك أردت ان أفيد به من لا يعلم بالامر

... هنا 3 كلاسات :

- TestDND

- DNDList

- DNDComponentInterface

سأضعها كاملة بدون أي تغيير

/**
 * The tester class for the DNDList. This class creates the lists, 
 * positions them in a frame, populates the list with the default 
 * data.
 *
 * @version 1.0
 *
 */

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

import javax.swing.*;


public class TestDND
{
  public static void main (String args[]) {
    TestDND testDND = new TestDND();
}

 /**
  * constructor
  * creates the frame, the lists in it and sets the data in the lists
  */

 public TestDND()
 {   
    JFrame f = new JFrame("Drag and Drop Lists");

    DNDList sourceList = new DNDList();

    // add data to the source List
    DefaultListModel sourceModel = new DefaultListModel();

    sourceModel.addElement( "Source Item1");
    sourceModel.addElement( "Source Item2");
    sourceModel.addElement( "Source Item3");
    sourceModel.addElement( "Source Item4");

    // gets the panel with the List and a heading for the List
    JPanel sourcePanel = getListPanel(sourceList, "SourceList", sourceModel); 

    DNDList targetList = new DNDList();

    // add data to the target List 
    DefaultListModel targetModel = new DefaultListModel();

    targetModel.addElement( "Target Item1");
    targetModel.addElement( "Target Item2");
    targetModel.addElement( "Target Item3");
    targetModel.addElement( "Target Item4");

    JPanel targetPanel = getListPanel(targetList, "TargetList", targetModel); 
    JPanel mainPanel = new JPanel();
	mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));
    mainPanel.add( sourcePanel );
    mainPanel.add( targetPanel );

    f.getContentPane().add( mainPanel );
    f.setSize (300, 300);
    f.addWindowListener (new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    f.setVisible (true);
  }

  /**
   * a convenience method
   * used for positioning of the ListBox and the Label.
   * 
   * @param list  - the special DND List
   * @param labelName - the heading for the list
   * @param listModel - model for the list
   */

  private JPanel getListPanel(DNDList list, String labelName, DefaultListModel listModel ){  
        JPanel listPanel = new JPanel();
        JScrollPane scrollPane = new JScrollPane(list);

        list.setModel(listModel);   
        JLabel nameListName = new JLabel(labelName );

        listPanel.setLayout( new BorderLayout());
        listPanel.add(nameListName, BorderLayout.NORTH);
        listPanel.add( scrollPane, BorderLayout.CENTER);

        return listPanel;     
  }

}

/**
 * This is an example of a component, which serves as a DragSource as 
 * well as Drop Target.
 * To illustrate the concept, JList has been used as a droppable target
 * and a draggable source.
 * Any component can be used instead of a JList.
 * The code also contains debugging messages which can be used for 
 * diagnostics and understanding the flow of events.
 * 
 * @version 1.0
 */

import java.awt.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;

import java.util.Hashtable;
import java.util.List;
import java.util.Iterator;

import java.io.*;
import java.io.IOException;

import javax.swing.JList;
import javax.swing.DefaultListModel;




public class DNDList extends JList
    implements DNDComponentInterface, DropTargetListener,DragSourceListener, DragGestureListener    {

  /**
   * enables this component to be a dropTarget
   */

  DropTarget dropTarget = null;

  /**
   * enables this component to be a Drag Source
   */
  DragSource dragSource = null;


  /**
   * constructor - initializes the DropTarget and DragSource.
   */

  public DNDList() {

    dropTarget = new DropTarget (this, this);
    dragSource = new DragSource();
    dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_MOVE, this);
  }

  /**
   * is invoked when you are dragging over the DropSite
   * 
   */

  public void dragEnter (DropTargetDragEvent event) {

    // debug messages for diagnostics 
    System.out.println( "dragEnter");
    event.acceptDrag (DnDConstants.ACTION_MOVE);
  }

  /**
   * is invoked when you are exit the DropSite without dropping
   *
   */

  public void dragExit (DropTargetEvent event) {
    System.out.println( "dragExit");

  }

  /**
   * is invoked when a drag operation is going on
   * 
   */

  public void dragOver (DropTargetDragEvent event) {
    System.out.println( "dragOver");
  }

  /**
   * a drop has occurred
   * 
   */


  public void drop (DropTargetDropEvent event) {

    try {
        Transferable transferable = event.getTransferable();

        // we accept only Strings      
        if (transferable.isDataFlavorSupported (DataFlavor.stringFlavor)){

            event.acceptDrop(DnDConstants.ACTION_MOVE);
            String s = (String)transferable.getTransferData ( DataFlavor.stringFlavor);
            addElement( s );
            event.getDropTargetContext().dropComplete(true);
        } 
        else{
            event.rejectDrop();
        }
    }
    catch (IOException exception) {
        exception.printStackTrace();
        System.err.println( "Exception" + exception.getMessage());
        event.rejectDrop();
    } 
    catch (UnsupportedFlavorException ufException ) {
      ufException.printStackTrace();
      System.err.println( "Exception" + ufException.getMessage());
      event.rejectDrop();
    }
  }

  /**
   * is invoked if the use modifies the current drop gesture
   * 
   */


  public void dropActionChanged ( DropTargetDragEvent event ) {
  }

  /**
   * a drag gesture has been initiated
   * 
   */

  public void dragGestureRecognized( DragGestureEvent event) {

    Object selected = getSelectedValue();
    if ( selected != null ){
        StringSelection text = new StringSelection( selected.toString()); 

        // as the name suggests, starts the dragging
        dragSource.startDrag (event, DragSource.DefaultMoveDrop, text, this);
    } else {
        System.out.println( "nothing was selected");   
    }
  }

  /**
   * this message goes to DragSourceListener, informing it that the dragging 
   * has ended
   * 
   */

  public void dragDropEnd (DragSourceDropEvent event) {   
    if ( event.getDropSuccess()){
        removeElement();
    }
  }

  /**
   * this message goes to DragSourceListener, informing it that the dragging 
   * has entered the DropSite
   * 
   */

  public void dragEnter (DragSourceDragEvent event) {
    System.out.println( " dragEnter");
  }

  /**
   * this message goes to DragSourceListener, informing it that the dragging 
   * has exited the DropSite
   * 
   */

  public void dragExit (DragSourceEvent event) {
    System.out.println( "dragExit");

  }

  /**
   * this message goes to DragSourceListener, informing it that the dragging is currently 
   * ocurring over the DropSite
   * 
   */

  public void dragOver (DragSourceDragEvent event) {
    System.out.println( "dragExit");

  }

  /**
   * is invoked when the user changes the dropAction
   * 
   */

  public void dropActionChanged ( DragSourceDragEvent event) {
    System.out.println( "dropActionChanged"); 
  }

  /**
   * adds elements to itself
   * 
   */

   public void addElement( Object s ){
        (( DefaultListModel )getModel()).addElement (s.toString());
  }

  /**
   * removes an element from itself
   */

  public void removeElement(){
    (( DefaultListModel)getModel()).removeElement( getSelectedValue());
  }

}

public interface DNDComponentInterface{

 public void addElement( Object s);
 public void removeElement();

}

المثال يستعمل JList * 2 فمن خلالهما نستطيع "سحب وافلات" الـ Items

المثال وااايد حلو وانا بصراحة عجبني واذا كان هناك أمثلة لتقنيات وأكواد جميلة فـــــــــرجاءا شاركونا اياها

تقبلوا تحيات اخوكم ناجي :lol:

556891961.gif

I am learning from you

it is the programmer eye

#2

من قال ان جافا لا تدعم DnD هذه الميزه شيئ اساسي في اي برنامج ومن المنطقي ان تكون موجوده. إذا اردت ان تستمع بجافا فعلا فهذه نصيحتي لك قم بتنزيل The Java Tutorial من موقع اوركل وهي مضغوطه في ملف zip على شكل موقع متكامل ، قم بعمل اختصار للصفحه الرئيسية للموقع و تصفحه متى اردت offline

http://www.oracle.com/technetwork/java/javase/downloads/java-se-7-tutorial-2012-02-28-1536013.html

كل ما تريد معرفته عن جافا SE و اكثر ستجده في هذا الملف الذي حجمه تقريبا 110 MB

تم تعديل هذه المشاركة بواسطة mental-driller في 2 نوفمبر 2012 في 00:24

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3

الله يبارك بعمرك ... مشكور استاذي

تسلم ايديك على المساعدات التي تقدمها الي :happy:

556891961.gif

I am learning from you

it is the programmer eye

#4

+1

شكرا الك اخوي mental ... فعلا مفيد ومافي أحلى من المصدر

راح أجرب البحث عن صيغة الـ PDF

تحياتي :lol:

556891961.gif

I am learning from you

it is the programmer eye

#5
المشاكـس5550 كتب:

+1

شكرا الك اخوي mental ... فعلا مفيد ومافي أحلى من المصدر

راح أجرب البحث عن صيغة الـ PDF

تحياتي :lol:

كشخص يحب الــ PDF دعني اقول لك انه في هذه الحاله الــ HTML افضل بكثير لان الدروس كثيره ويفضل تصفحها كموقع بحيث تكون الدروس مقسمه بشكل منظم ، على حد علمي JAVA EE Tutorial يوزع على شكل PDF قم بالتجربه وستجد ان التعلم باستخدام الموقع افضل

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#6

شكرا كثييييير عالنصيحة ... راح أجربها

:)

تم تعديل هذه المشاركة بواسطة المشاكـس5550 في 3 نوفمبر 2012 في 11:07

556891961.gif

I am learning from you

it is the programmer eye

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…