10

我正在尝试调整scene2d.ui 窗口(基本上是一个可以移动的表格)及其内容的大小。到目前为止,我只能成功更改窗口大小本身,但不能更改其内容。我这样做是这样的:

window.setWidth(newTableWidth);
textField.setWidth(newFieldWidth);
window.invalidate(); <--- New size of window is drawn properly when invalidate() is called
textField.invalidate(); <--- New textField size is NOT drawn, however

在这种情况下,窗口包含一个文本字段,我试图与窗口一起调整它的大小,但只有窗口会以其新大小重绘,而文本字段保持不变。

如何正确更新窗口中的小部件?

4

2 回答 2

16

我遇到了同样的问题,花了一段时间才得到解决方案。看看这个 quastion滑块总是有默认宽度

解决方案是:

UI 小部件不设置自己的大小和位置。相反,父窗口小部件设置每个孩子的大小和位置。小部件提供父级可以用作提示的最小、首选和最大大小。一些父窗口小部件,例如 Table,可以限制子窗口的大小和位置。要在布局中为小部件指定特定尺寸,小部件的最小、首选和最大尺寸将保持不变,并且在父级中设置尺寸约束。
Wiki 上的布局

来自 libGDX 的 wiki。他们只是添加了它。因此,当您将这些小部件添加到表格时,只需.width(newTableWidth)在末尾添加一行,它应该是正确的宽度。

table.add(textField).width(600).height(60);
于 2013-08-31T07:01:03.450 回答
2

根据BeenX 的回答,很明显,大小是在包含小部件的表格的单元格上设置的,而不是在小部件本身上。该table.add()方法返回一个单元格,因此在运行时table.add(textField).width(600).height(60)将宽度和高度应用于此单元格。

因此,我更新现有单元格的解决方案是找到要更新的单元格,table.getCells()然后在其上应用新宽度。下面的示例更改列表中最后一个单元格的宽度。

List<Cell> cells = window.getCells(); 
Cell cell = cells.get(cells.size()-1);
cell.width(newWidth);
于 2013-08-31T16:02:30.130 回答