Предотвращение захвата JTable с помощью DragGestureListener строки изменением размера мыши - PullRequest
0 голосов
/ 05 октября 2011

Я работаю с JTable, который может иметь переменную высоту строки.Я также недавно добавил поддержку Drag-and-drop для моей JTable, используя DragGestureListener для прослушивания событий перетаскивания и вызова «startDrag», если необходимо.

Проблема, с которой я столкнулся, заключается в том, что теперь даже движения мыши при изменении размера строки фиксируются интерфейсом DragGestureListener, и мне нужно найти способ отфильтровать жесты перетаскивания строк, которые также являются жестами изменения размера строк.Вот некоторый типичный код:

Class MyTable implements DragGestureListener
{
    .
    .
    .
    public void dragGestureRecognized(DragGestureEvent dge)
    {
        // Return early if selected row can't be dragged.

        /* ====== Attempt to filter out row resize drags: Attempt 1 ======= */
        if(getCursor().getType() == Cursor.N_RESIZE_CURSOR)
        {
            // Works, but does not seem robust. 
            return;
        }

        /* ====== Attempt to filter out row resize drags: Attempt 2 ======= */
        // Get starting position of mouse drag and the cell bounds of the cell in the row being dragged.
        Point dragStartPoint = dge.getDragOrigin(); 
        Rectangle cellRect = getCellRect(dragStartPoint);

        // Get mouse position relative to table.
        Point mousePosition = MouseInfo.getPointerInfo().getLocation();
        Point relativePosition = . . .; // calculate position relative to table.
        if(Math.abs(relativePosition.y - cellRect.y) < 5)
        {
            // Filter out a drag operation within 5 pixels of cell boundary
            // Seems to work, but is flaky, especially if row is resized quickly.
            return;  
        }
        .
        .
        .            
        dge.startDrag(DragSource.DefaultMoveDrop,
                      fDragImage, 
                      new Point(5,5), 
                      new StringSelection(""), // Transferable data
                      myDragSourceListener); 
    }
    .
    .
    .
}

Теперь, Какой самый лучший / рекомендуемый / самый надежный способ отфильтровать перетаскивания с изменением размера строки из обычных перетаскиваний строки?

ПРИМЕЧАНИЕ: Вы также заметили, что я использую пакет java.awt.dnd для перетаскивания, а не интерфейс TransferHandler.Если вам любопытно, единственная причина, по которой я это делаю, - это иметь детальный контроль над перетаскиванием подсказок и перетаскиванием изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...