Java / Swing: JTable.rowAtPoint не работает правильно для точек за пределами таблицы? - PullRequest
3 голосов
/ 22 апреля 2010

У меня есть этот код для получения строки из JTable, сгенерированной DragEvent для DropTarget в некотором компоненте C, который может быть или не быть JTable:

public int getRowFromDragEvent(DropTargetDragEvent event) {
        Point p = event.getLocation();
        if (event.getSource() != this.table)
        {
            SwingUtilities.convertPointToScreen(p, 
                event.getDropTargetContext().getComponent());
            SwingUtilities.convertPointFromScreen(p, this.table);
            if (!this.table.contains(p))
            {
                System.out.println("outside table, would be row 
                  "+this.table.rowAtPoint(p));
            }
        }
        return this.table.rowAtPoint(p);            
    }

System.out.println это просто хак прямо сейчас.Что мне интересно, так это то, что System.out.println не всегда печатает «строку -1».Когда таблица пуста, это так, но если я перетаскиваю что-то в строку заголовка таблицы, я получаю println со «строкой 0».Это похоже на ошибку ... или я не понимаю, как rowAtPoint() работает?

1 Ответ

1 голос
/ 22 апреля 2010

Какая версия Java у вас есть?

Мне кажется, что это ошибка: см. http://bugs.sun.com/view_bug.do?bug_id=6291631

Если это так, вы можете добавить дополнительную проверку:

if (!this.table.contains(p))
        {
            if(p.y < 0) 
              System.out.println("clicked above table");
            else
              System.out.println("outside table, would be row 
              "+this.table.rowAtPoint(p));
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...