我正在尝试创建一个具有pref大小的表格并将其自身置于屏幕中。当我更改表中Label
的内容时,我希望表能够做出反应并包含所有内容。但是它不起作用,表格没有调整大小,标签本身也有很大的偏移量。
此方法位于我的类Table
内。
public void setMessage(String text)
{
Label label = (Label)getCells().get(0).getActor();
label.setText(text);
//desperate attempts starts here
label.layout();
label.invalidateHierarchy();
label.invalidate();
label.setWidth(label.getPrefWidth());
label.setHeight(label.getPrefHeight());
layout();
invalidate();
invalidateHierarchy();
//desperate attempts ends here
setWidth(max(getPrefWidth(), 300));
setHeight(max(getPrefHeight(), 100));
setX(1600f / 2f - getWidth() / 2f);
setY(900f / 2f - getHeight() / 2f);
}
结果如下:
表本身以屏幕为中心。
修改: 这是构造函数的代码。 (顺便说一下,我知道scene2d已经有了一个Dialog类,但我在创建时并不知道,并希望完成这个。)
public Dialog(String message, Skin skin, Button... buttons)
{
super(skin);
setBackground("grayBG");
add(message).colspan(buttons.length).pad(20f);
row();
for(Button button : buttons)
add(button).minWidth(50f).padLeft(50f).padRight(50f).padBottom(20f).center();
setVisible(false);
setWidth(max(getPrefWidth(), 300));
setHeight(max(getPrefHeight(), 100));
setX(1600f / 2f - getWidth() / 2f);
setY(900f / 2f - getHeight() / 2f);
}
EDIT2 :
我通过调试发现label.setWidth(label.getPrefWidth())
按预期工作,并使用width()
方法设置单元格的宽度也有效。什么不起作用的是表getPrefWidth()
方法,它不返回所需的值。