2013-08-22 88 views
2

我试图从表中删除一行,并将该行下面的所有内容都向上移动一行。我根本没有成功。我已经尝试遍历所有单元格(使用Table.getCells())并以各种方式更新它们,但它似乎并不按照我想要的方式工作。有没有办法做到这一点?从scene2d.ui表中删除单元格

+1

你尝试通过Table.layout()或Table.invalidate()去除细胞/行后更新表? – noone

+0

是的,这对我当时正在做的事没有什么影响,但我现在就开始工作了。 – mattboy

回答

1

有些睡眠解决了问题!下面的示例从具有2列的表中移除第一行,并将所有其他行向上移动一步。

List<Cell> cells = table.getCells(); 

    //Remove contents of first row 
    cells.get(0).setWidget(null); 
    cells.get(1).setWidget(null); 

    //Copy all cells up one row 
    for (int i=0;i<cells.size()-2;i++){ 
     cells.set(i, cells.get(i+2)); 
    } 

    //Remove the last row 
    cells.remove(cells.size()-1); 
    cells.remove(cells.size()-1); 
2

一个清洁的解决方案将是下一个:

public void removeTableRow(int row) { 

    SnapshotArray<Actor> children = table.getChildren(); 
    children.ordered = false; 

    for (int i = row*COLUMN_NUMBER; i < children.size - COLUMN_NUMBER; i++) { 
     children.swap(i, i + COLUMN_NUMBER); 
    } 

    // Remove last row 
    for(int i = 0 ; i < COLUMN_NUMBER; i++) { 
     table.removeActor(children.get(children.size - 1)); 
    } 
}