Java Drag&;在Visual Studio 10上发布(可转让)版本
我有一个包含JTable的程序,我可以将单元格数据拖放到外部IDE中 我的可转移类支持两种数据风格Java Drag&;在Visual Studio 10上发布(可转让)版本,java,swing,drag-and-drop,jtable,Java,Swing,Drag And Drop,Jtable,我有一个包含JTable的程序,我可以将单元格数据拖放到外部IDE中 我的可转移类支持两种数据风格 DataFlavor.stringFlavor CUST_FLAVOR(应用程序中使用的自定义数据格式) 当我尝试将单元格数据拖放到Eclipse/Wordpad中时,工作正常。JVM将为stringFlavor调用getTransferData()。 但是,当我尝试拖放到Visual studio 10界面时,JVM将调用getTransferData(),用于stringFlavor和CUST
DataFlavor.stringFlavor
CUST_FLAVOR
(应用程序中使用的自定义数据格式)stringFlavor
调用getTransferData()。
但是,当我尝试拖放到Visual studio 10界面时,JVM将调用getTransferData()
,用于stringFlavor
和CUST\u FLAVOR
。我不知道为什么只有VisualStudio10界面才会出现这种情况。我尝试了VisualStudio2005,没有问题
下面是我的代码
如果我试图复制到写字板,它会打印(在system.out上)
getTransferData flavor=Unicode字符串
但是,在VisualStudio10中,它打印(在system.out上)
getTransferData flavor=Unicode字符串
getTransferData flavor=CUST\u flavor
在getTransferData()
方法中,如果它是CUST_FLAVOR
FLAVOR,那么它必须返回一个不可Serializable
的对象,因此它将抛出一个NotSerializableException
现在,当我尝试拖放到Visual Studio中时,如何限制JVM不为CUST\u FLAVOR
调用getTransferData()
public class DragDropTest extends JPanel{
private JTable table;
public static final DataFlavor CUST_FLAVOR = new DataFlavor(File.class, "CUST_FLAVOR");
DragDropTest(){
table = new JTable(5, 1);
table.getModel().setValueAt("Data 1", 0, 0);
table.getModel().setValueAt("Data 2", 1, 0);
table.setTransferHandler(new TransferHandler(){
public int getSourceActions(JComponent c){
return COPY;
}
protected Transferable createTransferable(JComponent component){
TableModel model = ((JTable)component).getModel();
Transferable transferable=new GenericTransferable(
model.getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
return transferable;
}
class GenericTransferable implements Transferable{
private String str;
public GenericTransferable(Object str){
this.str = str.toString();}
public DataFlavor[] getTransferDataFlavors(){
return new DataFlavor[]{DataFlavor.stringFlavor, CUST_FLAVOR};}
public boolean isDataFlavorSupported(DataFlavor flavor){
return flavor.equals(DataFlavor.stringFlavor) || flavor.equals(CUST_FLAVOR);}
public Object getTransferData(DataFlavor flavor)throws UnsupportedFlavorException{
System.out.println("getTransferData flavor = " + flavor.getHumanPresentableName());
if (flavor.equals(CUST_FLAVOR)) {
return new Object();
}
else if (flavor.equals(DataFlavor.stringFlavor)) {
return str;
}
throw new UnsupportedFlavorException(flavor);
}
}
});
setLayout(new GridLayout(1,0));
table.setDragEnabled(true);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
add(new JScrollPane(table));
}
public static void main(String[] args) {
JFrame frame = new JFrame("DragAndDropTest");
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new DragDropTest(), BorderLayout.CENTER);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
谢谢
-rooble要更快地获得更好的帮助,请发布一个。