Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JTable и Drag&Drop


Автор: ShkVal 24.3.2005, 17:14
Посмотрите пожалуйста, что я не так сделал? Drag&Drop не хочет работать
Код

public class DNDTable extends JTable implements DropTargetListener, DragSourceListener, DragGestureListener  {
    //private DropTarget dropTarget = null;
    private DragSource dragSource = null;

    private int[] selectedRows;
    private int[] selectedColumns;

    protected static Object dndObj;


    public DNDTable() {
        super(new DefaultTableModel());
        initComponents();
    }

    public DNDTable(TableModel dm) {
        super(dm);
    }

    public DNDTable(final Object[][] rowData, final Object[] columnNames) {
        super(rowData, columnNames);
    }

    private void initComponents() {
        //dropTarget = new DropTarget(this, this);
        dragSource = new DragSource();
        dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
    }

    public void drop(DropTargetDropEvent event) {
        Transferable transferable = event.getTransferable();
        event.acceptDrop(DnDConstants.ACTION_MOVE);
        event.getDropTargetContext().dropComplete(true);
        dragDropFinish(transferable);
    }

    public void dragGestureRecognized(DragGestureEvent event) {
     selectedRows = getSelectedRows();
        selectedColumns = getSelectedColumns();

        if (selectedRows.length != 0) {
            Transferable transfer = dragDropStart();

            if (transfer==null) transfer = new StringSelection(selectedRows+"|"+selectedColumns);
            // as the name suggests, starts the dragging
            try {
                dragSource.startDrag(event, DragSource.DefaultCopyDrop, transfer, this);
            } catch (InvalidDnDOperationException e) {
                System.err.println(e.getMessage());
            }
        }
    }
    
    public Transferable dragDropStart() {
        System.out.println("[VLR] DNDTable.dragDropStart() selectedRows="+selectedRows);
        System.out.println("[VLR] DNDTable.dragDropStart() selectedColumns="+selectedColumns);
        return null;
    }

    /** override it!*/
    public void dragDropFinish(Transferable transfer) {
        System.out.println("[VLR] DNDTable.dragDropFinish()");
    }

    public void dragDropEnd(DragSourceDropEvent evt) {
        return;
    }

    public void dragEnter(DragSourceDragEvent evt) {
        return;
    }

    public void dragExit(DragSourceEvent evt) {
        return;
    }

    public void dragOver(DragSourceDragEvent evt) {
        return;
    }

    public void dropActionChanged(DragSourceDragEvent evt) {
        return;
    }

    public void dragEnter(DropTargetDragEvent event){
        event.acceptDrag (DnDConstants.ACTION_MOVE);
    }
    public void dragExit(DropTargetEvent event){}
    public void dragOver(DropTargetDragEvent event) {
    }
    public void dropActionChanged ( DropTargetDragEvent event ){}
}


Автор: cube 16.5.2007, 15:42
Усли у человека надо мной Drag & Drop нехочет работать, то у меня не получается оключиьт его в JTable, для запрета перетаскивания столбцов, использую  table.setDragEnabled(false); - не помогает =(

Автор: w1nd 16.5.2007, 23:38
ShkVal, всё можно сделать существенно проще - посмотрите на класс javax.swing.TransferHandler. 

Цитата(cube @  16.5.2007,  15:42 Найти цитируемый пост)
Усли у человека надо мной Drag & Drop нехочет работать, то у меня не получается оключиьт его в JTable, для запрета перетаскивания столбцов, использую  table.setDragEnabled(false); - не помогает =(

Перетаскивание к механизму DnD отношение не имеет. Включается/отключается так:
Код
table.getTableHeader().setReorderingAllowed(...);




Автор: cube 17.5.2007, 09:32
Цитата(w1nd @ 16.5.2007,  23:38)
ShkVal, всё можно сделать существенно проще - посмотрите на класс javax.swing.TransferHandler. 

Цитата(cube @  16.5.2007,  15:42 Найти цитируемый пост)
Усли у человека надо мной Drag & Drop нехочет работать, то у меня не получается оключиьт его в JTable, для запрета перетаскивания столбцов, использую  table.setDragEnabled(false); - не помогает =(

Перетаскивание к механизму DnD отношение не имеет. Включается/отключается так:
Код
table.getTableHeader().setReorderingAllowed(...);

Спасибо помогло!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)