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);
}
}
}