如何从它的演员更新表大小?

时间:2017-02-22 14:21:24

标签: java libgdx scene2d

我正在尝试创建一个具有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);
}

结果如下:

Result

表本身以屏幕为中心。

修改: 这是构造函数的代码。 (顺便说一下,我知道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()方法,它不返回所需的值。

0 个答案:

没有答案