最初に、私が最も頭の切れる Java 開発者ではないことを認めたいと思います。私の強み/経験は主に JavaScript などのブラウザーにあります。
ファイルをブラウザー (IE7) にドラッグ アンド ドロップするために使用できるアプレットを作成するように依頼されました。それは問題ありませんでした。ここから FileDrop クラスを使用しました。
ライブに移行しようとしていますが、クライアントは、アプリケーションをユーザーのプールに表示した後、アプリケーションがファイルをインターフェイスから Windows エクスプローラー/デスクトップなどにドラッグできるようにする必要があると判断しました。 .
UI の設定方法は、右側のコンテンツ ペインにファイルのリストがあり、左側にナビゲーション エリア (ユーザーがクリックするとファイルのリストを取得するディレクトリのツリーなど) があります。コンテンツエリアにあります。ユーザーがクリックしてマウスを押したままにすると、アプレットが最終的にダウンロードしたファイルとともに表示され、ユーザーはクリックしてそのファイルをインターフェイスからドラッグし、UI の別のドロップ ターゲットにドラッグしたり、Windows エクスプローラーなどにドラッグしたりします。
アプレットのコードを次に示します。
public MyFileDrop() {
panel = new JPanel();
panel.setLayout(new GridBagLayout());
panel.setBorder(BorderFactory.createLineBorder(Color.gray, 1));
panel.setBackground(new Color(245, 245, 245));
JLabel label = new JLabel("+", JLabel.CENTER);
label.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 15));
label.setForeground(Color.gray);
panel.add(label);
DefaultListModel model = new DefaultListModel();
fileList = new JList(model);
fileList.setDragEnabled(true);
fileList.setSize(250, 25);
panel.add(fileList);
panel.addMouseListener(new MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
System.out.println("mouseEntered");
File file = self.getAndSaveLocalFile(self.documentUrl, self.name, self.id);
if (!file.isDirectory())
((DefaultListModel) ((JList) panel.getComponent(1)).getModel()).addElement(file);
}
...
ファイルを Windows エクスプローラ ウィンドウにドラッグすると、円とスラッシュのイメージが表示されます (つまり、タバコのない「禁煙」のように)。また、UI のターゲットにもドロップされません。ファイルの .getCannonicalPath() を sysouted しましたが、すべてがファイルをドラッグしているという概念を指しているように見えますが、システムはそれを認識していないようです。私はこの質問を見てきました:
Java から Windows エクスプローラーへの DragNDrop
しかし、JList の組み込みのドラッグ アンド ドロップ機能を使用していて、MIME タイプを変更する方法がわかりません。独自の TransferHandler を作成する必要がありますか? もしそうなら、それは正確に何をする必要がありますか?