我正在尝试从表格中删除一行,并将该行下方的所有内容向上移动一行。我一点也不成功。我已经尝试遍历所有单元格(使用Table.getCells()
)并以各种方式更新它们,但它似乎并没有按照我想要的方式工作。有没有办法做到这一点?
问问题
4676 次
4 回答
5
Actor
您可以像这样删除单元格:
public static void removeActor(Table container, Actor actor) {
Cell cell = container.getCell(actor);
actor.remove();
// remove cell from table
container.getCells().removeValue(cell, true);
container.invalidate();
}
这不是很漂亮的解决方案,但它有效
于 2018-03-14T18:36:00.907 回答
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));
}
}
于 2014-02-03T18:51:11.813 回答
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);
于 2013-08-23T13:55:23.043 回答
0
在尝试了所有早期的响应之后,这对我来说效果很好。
deleteStockButton.addListener(new ChangeListener() {
public void changed(ChangeListener.ChangeEvent event, Actor actor) {
if (stockTableIndex != null) {
try {
Table stockTable = (Table) stockScroll.getActor();
List<Actor> cells = new ArrayList<>();
for (Cell c : stockTable.getCells().toArray(Cell.class)) {
cells.add(c.getActor());
}
cells.remove(stockTableIndex);
stockTable.clearChildren();
for (Actor a : cells) {
stockTable.row().pad(2);
stockTable.add(a).height(TEXT_HEIGHT).left().expandX();
}
stockTable.layout();
} catch (Exception e) {
e.printStackTrace();
}
stockTableIndex = null;
}
}
});
于 2020-06-19T00:58:47.273 回答