gpt4 book ai didi

java - 整个 JFrame 上的 TransferHandler

转载 作者:行者123 更新时间:2023-12-02 04:23:15 25 4
gpt4 key购买 nike

我想处理来自其他应用程序的File Drops。现在我可以区分不同的 DataFlavors 并接受正确的类型。

这是我正在使用的源代码:

private TransferHandler transferehandler = new TransferHandler(){
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
if (!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
return false;
}

boolean copySupported = (MOVE & support.getSourceDropActions()) == MOVE;

if (!copySupported) {
return false;
}

support.setDropAction(MOVE);


return true;
}

第一部分是设置我的 canImport,检查文件是否支持 MOVE 选项,并检查它是否是一个文件。

@Override
public boolean importData(TransferHandler.TransferSupport support){
if(!canImport(support))
return false;
Transferable t = support.getTransferable();
try {
List<File> l = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
System.out.println(l);
} catch (UnsupportedFlavorException | IOException e) {
e.printStackTrace();
return false;
}
return true;
}
};

这是我对 importData 方法的实现。出于测试目的,我打印拖到具有此 TransferHandlerComponent 上的每个文件。

通过阅读JavaDocs我只能处理来自不同 JPanels 的掉落。但我实际上想创建这样的东西:

It should look like this

希望你明白我的意思。

最佳答案

在这里,您可以 DnD 任何子组件(就像我在评论中写的那样)。您可以将两者放在红色(父内容 Pane )和蓝色(子)组件上。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.TransferHandler;


public class TransferableJFrame {



public static void main(String[] args) {
JFrame f=new JFrame();

f.setSize(1000, 1000);

JPanel contentPane=new JPanel();
contentPane.setOpaque(true);
contentPane.setBackground(Color.red);
contentPane.setLayout(new FlowLayout());

contentPane.setTransferHandler(new MyTrasnferHandler());


JPanel child=new JPanel();
child.setOpaque(true);
child.setBackground(Color.BLUE);
child.setPreferredSize(new Dimension (600,600));
contentPane.add(child);
f.setContentPane(contentPane);

f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);


}

private static class MyTrasnferHandler extends TransferHandler{
@Override
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
System.out.println("we will drop here");
return true;
}
@Override
public boolean importData(JComponent comp, Transferable t) {
System.out.println("Dropped");
return super.importData(comp, t);
}
}


}

关于java - 整个 JFrame 上的 TransferHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32510031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com