Me gustaría arrastrar y soltar archivos externos (por ejemplo, desde el explorador de Windows) en una JTable. ¿Alguien tiene un código de ejemplo de cómo se hace esto?¿Cómo puedo arrastrar y soltar archivos en una JTable?
7
A
Respuesta
11
Simplemente use la clase DropTarget para recibir eventos de soltar. Se puede distinguir entre gotas en la tabla actual (columnas disponibles/filas) y en el panel de desplazamiento (por ejemplo, a añadir nuevas filas)
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();
}
}
7
@yossale Es necesario añadir el siguiente código al método:
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);
}
En lugar de configurar, puede agregar filas a la tabla al validar que los datos no están duplicados y agregar la información del archivo como filas nuevas a la tabla.
Cuestiones relacionadas
- 1. ¿Cómo puedo arrastrar y soltar archivos en una aplicación?
- 2. Swing arrastrar y soltar
- 3. Arrastrar y soltar archivos en WPF
- 4. ¿Cómo se puede arrastrar y soltar una fila en una JTable?
- 5. Arrastrar y soltar archivos virtuales con IStream
- 6. ipad arrastrar y soltar
- 7. Cambio del cursor del mouse para HTML5 Arrastrar y soltar archivos (GMail Arrastrar y soltar)
- 8. ItemsControl Arrastrar y soltar
- 9. Arrastrar y soltar en Treeview
- 10. ¿Cómo arrastrar y soltar archivos adjuntos en el navegador?
- 11. C# arrastrar y soltar archivos en el formulario
- 12. ¿Arrastrar y soltar polyfill?
- 13. IE8: arrastrar y soltar archivos a una página web
- 14. Arrastrar y soltar en Desktop/Explorer
- 15. Arrastrar y soltar en MobileSafari?
- 16. JQuery - Arrastrar y soltar archivos - ¿Cómo obtener información del archivo?
- 17. carga de archivos con arrastrar soltar
- 18. Arrastrar y soltar usando SendMessage
- 19. Arrastrar y soltar con una imagen
- 20. Archivo Arrastrar y soltar en Firefox (v10)
- 21. Trello arrastrar y soltar efecto
- 22. Arrastrar y soltar con Ember.js
- 23. arrastrar y soltar controles winform
- 24. desactivar texto arrastrar y soltar
- 25. Arrastrar y soltar no funciona en Mac
- 26. HTML5 Arrastrar y soltar nodos
- 27. Arrastrar y soltar con columpio
- 28. UICollectionView efectiva arrastrar y soltar
- 29. arrastrar y soltar objetos personalizados
- 30. Javascript Arrastrar y soltar cuadrícula
Este código no hace nada excepto mostrar la tabla. Al arrastrarlo, no pasa nada – Yossale