用javaswing实现文件拖拽上传,用另一个类接收swing界面上传文件的内容
时间: 2023-06-27 13:03:11 浏览: 59
实现文件拖拽上传可以参考以下代码:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.*;
import java.io.File;
import java.util.List;
public class FileDragAndDrop extends JFrame {
private JTextArea textArea;
public FileDragAndDrop() {
setTitle("File Drag and Drop");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 400);
JPanel panel = new JPanel(new BorderLayout());
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
panel.add(scrollPane, BorderLayout.CENTER);
// 添加文件拖拽监听器
DropTarget dropTarget = new DropTarget(textArea, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter() {
@Override
public void drop(DropTargetDropEvent event) {
try {
event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
Transferable transferable = event.getTransferable();
if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
List<File> fileList = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
for (File file : fileList) {
// 在文本域中显示文件名
textArea.append(file.getName() + "\n");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
textArea.setDropTarget(dropTarget);
setContentPane(panel);
setVisible(true);
}
public static void main(String[] args) {
new FileDragAndDrop();
}
}
```
在这个例子中,我们使用了 `JTextArea` 作为拖拽目标,当用户拖拽文件到文本域中时,程序会将文件名添加到文本域中。如果需要将文件内容传递给另一个类,可以在 `drop` 方法中获取文件内容并将其传递给另一个类的方法。
下面是一个示例代码,用于将文件内容传递给另一个类:
```java
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
public class FileReceiver {
public static void receive(File file) throws IOException {
String content = new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8);
System.out.println(content);
}
}
```
在 `drop` 方法中调用 `FileReceiver.receive(file)` 方法即可将文件内容传递给另一个类。完整代码如下:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.*;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.List;
public class FileDragAndDrop extends JFrame {
private JTextArea textArea;
public FileDragAndDrop() {
setTitle("File Drag and Drop");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 400);
JPanel panel = new JPanel(new BorderLayout());
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
panel.add(scrollPane, BorderLayout.CENTER);
// 添加文件拖拽监听器
DropTarget dropTarget = new DropTarget(textArea, DnDConstants.ACTION_COPY_OR_MOVE, new DropTargetAdapter() {
@Override
public void drop(DropTargetDropEvent event) {
try {
event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
Transferable transferable = event.getTransferable();
if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
List<File> fileList = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
for (File file : fileList) {
// 在文本域中显示文件名
textArea.append(file.getName() + "\n");
// 将文件内容传递给另一个类
FileReceiver.receive(file);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
textArea.setDropTarget(dropTarget);
setContentPane(panel);
setVisible(true);
}
public static void main(String[] args) {
new FileDragAndDrop();
}
}
class FileReceiver {
public static void receive(File file) throws IOException {
String content = new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8);
System.out.println(content);
}
}
```