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 (300, 300);
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ÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°Àº¹Ì´ÏÄÚµå ÀÛ¼ºÀÚ:Àںϸâ¹ö ±è´ë¼º |