问题描述
我使用 JLabel 和 ImageIcon 创建了简单的组件调色板。 这是调色板项目的代码:
public class TransferableIcon extends JLabel implements Transferable {
private final Image icon;
public TransferableIcon(Image image) {
super(new ImageIcon(image));
this.icon = image;
setTransferHandler(ImageTransferHandler.getTransferHandler());
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
JComponent component = (JComponent)e.getSource();
getTransferHandler().exportAsDrag(component,e,TransferHandler.COPY);
}
});
}
private static final DataFlavor[] FLAVORS = new DataFlavor[]{ DataFlavor.imageFlavor };
@Override
public DataFlavor[] getTransferDataFlavors() {
return FLAVORS;
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
boolean result = false;
for(DataFlavor dataFlavor : FLAVORS) {
if(dataFlavor.equals(flavor))
result = true;
}
return result;
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException,IOException {
if(!isDataFlavorSupported(flavor))
throw new UnsupportedFlavorException(flavor);
else
return icon;
}
}
我自己的 TransferHandler 类覆盖了一些方法:
public class ImageTransferHandler extends TransferHandler {
private static final TransferHandler TRANSFER_HANDLER = new ImageTransferHandler();
@Override
public int getSourceActions(JComponent c) {
return TransferHandler.COPY;
}
@Override
protected Transferable createTransferable(JComponent c) {
Image image = null;
if(c instanceof JLabel) {
JLabel label = (JLabel)c;
Icon icon = label.getIcon();
image = ((ImageIcon)icon).getImage();
return new TransferableIcon(image);
}
else
throw new IllegalArgumentException("Can not transfer such a widget");
}
public static TransferHandler getTransferHandler() {
return TRANSFER_HANDLER;
}
}
我有一个可视化库场景,通过 scene.createView()
方法添加到 JFrame。
我在场景中添加了一个 AcceptAction,创建了我自己的 AcceptProvider,但它的 accept()
方法从未被调用:当我尝试将 TransferableIcon
拖到场景中时,我看到了“不允许”光标,但没有任何反应当我将图标放到场景中时。
那么,我如何才能启用拖放到场景中?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)