JList的TransferHandler.createTransferable()和.exportDone()未被调用

时间:2013-11-21 20:04:16

标签: java swing drag-and-drop jlist

我已向我的TransferHandler添加了自定义JList,以覆盖某些功能。

具体来说,我想设置自定义DataFlavor以禁用拖动到ComboBox和文本字段。

fileList.setTransferHandler(new TransferHandler() {

        @Override
        public int getSourceActions(JComponent comp) {
            return COPY;
        }

        @Override
        public boolean canImport(TransferSupport support) {
            // this works
        }

        @Override
        public boolean importData(TransferSupport support) {
            // this works too
        }

        @Override
        protected void exportDone(JComponent source, Transferable data, int action) {

            // WONT WORK
            System.out.println("export done");
        }

        @Override
        protected Transferable createTransferable(JComponent c) {               

            // NEITHER THIS
            System.out.println("createTransferable");

            return new Transferable() {
                // some stuff
            };
        }
    });

任何人都知道为什么exportDonecreateTransferable没有被调用?

2 个答案:

答案 0 :(得分:1)

您的传输处理程序需要位于其自己的类中,并在每个源和目标组件上设置。 源组件将调用createTransferable()方法

CustomTransferHandler customTransferHandler = new CustomTransferHandler();

sourceComponent.setTransferHandler(customTransferHandler);
targetComponent.setTransferHandler(customerTransferHandler);

答案 1 :(得分:0)

我记得我在JTabbedPane上遇到过这样的问题。 检查setDropEnabled的API或者像这样。我用手机写的,所以我不能完全说出来。

还要确保您的JList触发拖动启动事件。