`
Danker.Dai
  • 浏览: 67355 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Jlist中元素的拖入拖出

阅读更多

Jlist中拖出,则该JList  setTransferHandler(new TransferHandler(){

    @Override
   public int getSourceActions(JComponent c){


    }

   

    @Override

   protected Transferable createTransferable(JComponent c){

    

    }

} ):

拖入到 dragInList中 则 dragInLis. setTransferHandler(new TransferHandler(){

 


   @Override

   public boolean importData(TransferSupport support) {

       if( canImport( support ) ){

             // TODO add to dragInList

        }


    }

 

     public boolean canImport(TransferSupport support) {


     }

   

} ):

 

package _2010_1_22;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;

import javax.swing.DefaultListModel;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.TransferHandler;

public class JlistImport extends JPanel {
    private JList dragInList = null;
    private JList dragOutList = null;
    private DefaultListModel dragInListModel =null;

    //拖入数据到 dragInList
    public JList getDragInList() {
        if (dragInList == null) {
            dragInList = new JList();
            dragInList.setModel(getDragInListModel());
            dragInList.setTransferHandler(new TransferHandler() {
                //重置数据导入方法
                @Override
                public boolean importData(TransferSupport support) {
                    if (canImport(support)) {
                        Transferable reportObject = support.getTransferable();
                        TransferableParameter parameter = (TransferableParameter)reportObject;
                        getDragInListModel().addElement(parameter.getData());
                        return true;
                    }
                    return false;
                }
                //判断能否拖入数据,如从
dragOutList 中拖出的,则可以拖入到 dragInList 中
                public boolean canImport(TransferSupport support) {
                    boolean canImport = false;
                    Transferable reportObject = support.getTransferable();
                    try{
                        TransferableParameter parameter = (TransferableParameter)reportObject;
                        if(parameter.getSourceComponent() == dragOutList){
                            canImport = true;
                        }

                    }catch (Exception e) {
                    }
                    return canImport;
                }
            });
        }
        return dragInList;
    }
    private DefaultListModel getDragInListModel(){
        if(dragInListModel ==null){
            dragInListModel = new DefaultListModel();
        }
        return dragInListModel;
    }

//从dragOutList 中拖出数据
    public JList getDragOutList() {
        if (dragOutList == null) {
            dragOutList = new JList();
            dragOutList.setTransferHandler(new TransferHandler() {
                @Override
                public int getSourceActions(JComponent c) {
                    if (c == dragOutList) {
                        return TransferHandler.COPY;
                    }
                    return super.getSourceActions(c);
                }
               //创建拖出数据
                @Override
                protected Transferable createTransferable(JComponent c) {
                    if (c == dragOutList) {
                        String name = "data";
                        TransferableParameter parameter = new TransferableParameter(dragOutList,name);
                        return parameter;
                    }
                    return super.createTransferable(c);
                }
            });
        }
        return dragOutList;
    }
    class TransferableParameter implements Transferable {
        protected  String localParameterType = DataFlavor.javaJVMLocalObjectMimeType + ";class=com.angelman.framework.workspace.ProjectTreeReportItemParameter";
        public  DataFlavor localParameterFlavor = null;
        private DataFlavor[] columnFlavors = new DataFlavor[] { localParameterFlavor };

        private JComponent sourceComponent = null;
        private Object data = null;
        public TransferableParameter(JComponent sourceComponent,Object data) {
            this.sourceComponent = sourceComponent;
            this.data = data;
            try {
                localParameterFlavor = new DataFlavor(localParameterType);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }

        public JComponent getSourceComponent() {
            return sourceComponent;
        }

        public Object getData() {
            return data;
        }

        public void setData(Object data) {
            this.data = data;
        }

        public void setSourceComponent(JComponent sourceComponent) {
            this.sourceComponent = sourceComponent;
        }

        @Override
        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
            if (isDataFlavorSupported(flavor)) {
                return this;
            }
            return null;
        }

        @Override
        public DataFlavor[] getTransferDataFlavors() {
            return columnFlavors;
        }

        @Override
        public boolean isDataFlavorSupported(DataFlavor flavor) {
            if (flavor == null) {
                return false;
            }
            return localParameterFlavor.equals(flavor);
        }

    }
}

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics