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

mat*_*boy 10 libgdx

我正在尝试调整一个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
Run Code Online (Sandbox Code Playgroud)

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

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

Ben*_*nnX 16

我有同样的问题,需要一段时间才能得到解决方案.看看这个quastion 滑块总是有默认宽度.

解决方案是:

UI小部件不设置自己的大小和位置.相反,父窗口小部件设置每个子项的大小和位置.窗口小部件提供父级可用作提示的最小,首选和最大大小.某些父窗口小部件(如Table)可以为如何调整子项的大小和位置提供约束.要在窗体中为窗口小部件指定特定大小,窗口小部件的最小,首选和最大大小将保持不变,并且在父窗口中设置大小约束.
Wiki的布局

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

table.add(textField).width(600).height(60);
Run Code Online (Sandbox Code Playgroud)


mat*_*boy 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);
Run Code Online (Sandbox Code Playgroud)