¼Ò¼³ java.awt ¼Ò½ºÄڵ堠Drag and Drop  itemÀ»List¿¡¼­drag&dropÇϴ¿¹Á¦  

itemÀ» List¿¡¼­ drag&dropÇÏ´Â ¿¹Á¦

DNDComponentInterface.java

public interface DNDComponentInterface{
  
public void 
addElement(Object s);
  
public void 
removeElement();
}

DNDList.java

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{
  DropTarget dropTarget = 
null
;
  DragSource dragSource = 
null
;
  
public 
DNDList() {   
    dropTarget = 
new DropTarget (this, this
);
    dragSource = 
new 
DragSource();
    dragSource.createDefaultDragGestureRecognizer( this, DnDConstants.ACTION_MOVE, 
this
);
  }
  
public void 
dragEnter (DropTargetDragEvent event) {
    System.out.println( 
"dragEnter"
);
    event.acceptDrag (DnDConstants.ACTION_MOVE);
  }
  
public void 
dragExit (DropTargetEvent event) {
    System.out.println( 
"dragExit"
);    
  }
  
public void 
dragOver (DropTargetDragEvent event){
    System.out.println( 
"dragOver"
);
  }
  
public void 
drop (DropTargetDropEvent event){    
    
try
{
      Transferable transferable = event.getTransferable();                   
      
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();
    }
  }
  
public void 
dropActionChanged(DropTargetDragEvent event){
  }
  
public void 
dragGestureRecognized(DragGestureEvent event){
    Object selected = getSelectedValue();
    
if(selected != null
){
      StringSelection text = 
new 
StringSelection(selected.toString());        
      dragSource.startDrag (event, DragSource.DefaultMoveDrop, text, 
this
);
    }
else
{
      System.out.println( 
"nothing was selected"
);   
    }
  }
  
public void 
dragDropEnd (DragSourceDropEvent event) {   
    
if 
( event.getDropSuccess()){
      removeElement();
    }
  }
  
public void 
dragEnter (DragSourceDragEvent event) {
    System.out.println( 
" dragEnter"
);
  }
  
public void 
dragExit (DragSourceEvent event) {
    System.out.println( 
"dragExit"
);    
  }
  
public void 
dragOver (DragSourceDragEvent event) {
    System.out.println( 
"dragExit"
);    
  }
  
public void 
dropActionChanged ( DragSourceDragEvent event) {
    System.out.println( 
"dropActionChanged"
); 
  }
  
public void 
addElement( Object s ){
    (( DefaultListModel )getModel()).addElement (s.toString());
  }
  
public void 
removeElement(){
    (( DefaultListModel)getModel()).removeElement( getSelectedValue());
  }  
}

TestDND.java

import java.awt.*;
import 
java.awt.event.*;
import 
javax.swing.*;
public class 
TestDND{
  
public static void 
main (String args[]) {
    TestDND testDND = 
new 
TestDND();
  }
  
public 
TestDND(){   
    JFrame f = 
new JFrame("Drag and Drop Lists"
);
    DNDList sourceList = 
new 
DNDList();
    DefaultListModel sourceModel = 
new 
DefaultListModel();
    sourceModel.addElement( 
"Source Item1"
);
    sourceModel.addElement( 
"Source Item2"
);
    sourceModel.addElement( 
"Source Item3"
);
    sourceModel.addElement( 
"Source Item4"
);
    JPanel sourcePanel = getListPanel(sourceList, 
"SourceList"
, sourceModel); 
    DNDList targetList = 
new 
DNDList();
    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 (
300300
);
    f.addWindowListener(
new 
WindowAdapter(){
      
public void 
windowClosing(WindowEvent e){
        System.exit(
0
);
      }
    });
    f.setVisible (
true
);
  }
  
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;     
  }  
}

C:\18>javac javac DNDList.java
C:\18>javac TestDND.java
C:\18>java TestDND

itemÀ» Ŭ¸¯Çϸé drag°¡ µÇ°í, ¿·ÀÇ list·Î Àâ¾Æ¼­ ²ø¸é dropÀÌ µË´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°Àº¹Ì´ÏÄÚµå
ÀÛ¼ºÀÚ:Àںϸâ¹ö ±è´ë¼º