Libgdx 如何更改窗口/表格中现有scene2d.ui小部件的大小?

Libgdx 如何更改窗口/表格中现有scene2d.ui小部件的大小?,libgdx,Libgdx,我正在尝试调整scene2d.ui窗口(基本上是一个可以移动的表)及其内容的大小。到目前为止,我只能成功地更改窗口大小本身,但不能更改其内容。我是这样做的: window.setWidth(newTableWidth); textField.setWidth(newFieldWidth); window.invalidate(); <--- New size of window is drawn properly when invalidate() is called textField.

我正在尝试调整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
window.setWidth(newTableWidth);
textField.setWidth(newFieldWidth);

window.invalidate() 我也有同样的问题,花了一段时间才找到解决办法。 看看这个假设

解决办法是:

UI小部件不设置自己的大小和位置。相反,父窗口小部件设置每个子窗口的大小和位置。小部件提供了父级可以用作提示的最小、首选和最大大小。一些父窗口小部件(如Table)可以在如何调整子窗口小部件的大小和位置方面受到约束。为了在布局中为小部件指定一个特定的大小,小部件的最小、首选和最大大小将被保留,并且大小约束将在父级中设置

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

table.add(textField).width(600).height(60);

根据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);
List cells=window.getCells();
Cell Cell=cells.get(cells.size()-1);
单元格宽度(新宽度);

谢谢。这是我最初设置小部件大小的方式,但我正在尝试在设置之后进行更改。我正在调整表的大小,但在添加新行之前,表中的所有内容都保持相同的大小。您知道是否可以在不向表中添加新内容的情况下“刷新”小部件的大小?到目前为止,对我来说,这似乎是scene2d的一个弱点,它似乎不是设计用来在设置一次后动态更改的。您需要调整它的单元格大小,而不是小部件本身。之后,您将使用表上的“无效”。我认为它并不弱,只是它的工作方式是的,我现在也意识到需要对cell进行更改,而不是小部件。谢谢你给我指明了正确的方向。祝你好运。我花了5-6天的时间才找到答案,因为没有关于它的任何文字。当时我开了一张罚单来获取有关它的信息。