Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Drag&;在Visual Studio 10上发布(可转让)版本_Java_Swing_Drag And Drop_Jtable - Fatal编程技术网

Java Drag&;在Visual Studio 10上发布(可转让)版本

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

我有一个包含JTable的程序,我可以将单元格数据拖放到外部IDE中

我的可转移类支持两种数据风格

  • DataFlavor.stringFlavor
  • CUST_FLAVOR
    (应用程序中使用的自定义数据格式)
  • 当我尝试将单元格数据拖放到Eclipse/Wordpad中时,工作正常。JVM将为
    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

    要更快地获得更好的帮助,请发布一个。