[英]How do I drag & drop files into a JTable?
我想將外部文件(例如從 windows 資源管理器)拖放到 JTable 中。 有人有一些示例代碼來說明這是如何完成的嗎?
只需使用 DropTarget class 即可接收丟棄事件。 您可以區分拖放到當前表(可用列/行)和滾動窗格(例如添加新行)
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDropEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class SwingTest extends JFrame{
private JTable table = new JTable();
private JScrollPane scroll = new JScrollPane(table);
private DefaultTableModel tm = new DefaultTableModel(new String[]{"a","b","c"},2);
public SwingTest() {
table.setModel(tm);
table.setDropTarget(new DropTarget(){
@Override
public synchronized void drop(DropTargetDropEvent dtde) {
Point point = dtde.getLocation();
int column = table.columnAtPoint(point);
int row = table.rowAtPoint(point);
// handle drop inside current table
super.drop(dtde);
}
});
scroll.setDropTarget(new DropTarget(){
@Override
public synchronized void drop(DropTargetDropEvent dtde) {
// handle drop outside current table (e.g. add row)
super.drop(dtde);
}
});
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(scroll);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(800,600);
this.setVisible(true);
}
public static void main(String[] args) {
new SwingTest();
}
}
@yossale 您需要在方法中添加以下代碼:
public synchronized void drop(DropTargetDropEvent dtde)
{
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
Transferable t = dtde.getTransferable();
List fileList = (List)t.getTransferData(DataFlavor.javaFileListFlavor);
File f = (File)fileList.get(0);
table.setValueAt(f.getAbsolutePath(), row, column);
table.setValueAt(f.length(), row, column+1);
}
在驗證數據不重復並將文件信息作為新行添加到表時,而不是設置您可以 append 行到表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.