JTable:如何在drop完成之前检测列插入?

时间:2012-06-13 09:26:44

标签: java swing drag-and-drop jtable

我有一个可以删除组件的JTable。其中一些组件只能作为表中的插入项删除(因此不会在已存在的单元格中删除)。

我的问题是如何禁止丢弃这些组件的细胞。我试过像:

JTable table = new JTable();
table.setDropMode(DropMode.ON_OR_INSERT_COLS);
table.setTransferHandler(new ExampleTransferHandler());
boolean onlyColumnInsert = true;

private class ExampleTransferHandler extends TransferHandler{
    public boolean canImport(TransferSupport support){
        if(onlyColumnInsert){
            return table.getDropLocation().isInsertColumn();
        }else{
            return true;
        }
    }
}

但这不起作用,因为isInsertColumn()仅在删除完成后设置。有没有其他方法可以检测drop是否会导致TransferHandler中canImport()方法的列插入?

谢谢!

1 个答案:

答案 0 :(得分:0)

通过将TransferSupport传递的DropLocation转换为JTable.DropLocation,我找到了解决此问题的方法:

private class ExampleTransferHandler extends TransferHandler{
  public boolean canImport(TransferSupport support){
    if(onlyColumnInsert){
        return ((JTable.DropLocation)support.getDropLocation()).isInsertColumn();
    }else{
        return true;
    }
  }
}