我有这段代码可以从 JTable 中获取一行,该行是由 DragEvent 为某个组件 C 中的 DropTarget 生成的,它可能是也可能不是 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 现在只是一个 hack。我想知道的是,为什么 System.out.println 并不总是打印“行 -1”。当表格为空时它确实如此,但是如果我将某些东西拖到表格的标题行上,我会得到带有“第 0 行”的 println。这似乎是一个错误......或者我不明白 rowAtPoint()
是如何工作的?
最佳答案
您使用的是哪个版本的 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));
}
关于Java/Swing : JTable. rowAtPoint 对于表外的点不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2692095/