IllegalStateException:布局期间请求的布局

时间:2012-06-05 15:51:14

标签: user-interface blackberry blackberry-jde

我试图在布局期间(在layout()方法内)设置一些LabelField文本,具体取决于显示的方向,如下所示:

LabelField roomDescLabel = new LabelField("", Field.FIELD_VCENTER) {
    protected void layout(int width, int height) {
        if (Display.ORIENTATION_LANDSCAPE == orientation) {
            setText("LANDSCAPE");
        } else {
            setText("NOT LANDSCAPE");
        }
        super.layout(width, height);
    }
};

有时,我正在使用布局消息中请求的布局来捕获IllegalStateException。这条消息很有意义,因为这正是我正在做的事情(我正在调用setText(),而LabelField又要求布局更新)。是否有任何可接受的方式根据显示器的方向设置文本值?

我找到了解决这个问题的方法,但我并不完全满意。解决方案是覆盖sublayout()经理的super.sublayout()方法,并将现有标签字段替换为具有更新文本的新标签字段(并且仅调用invokeLater())。令人惊讶的是,此解决方法按预期工作,并未触发布局更新。

更新: 另一种可能的解决方案是使用setText() layout()方法中的LabelField操作调用sublayout()。与我之前提出的解决方案相比,此方法的缺点是paint()和{{1}}方法将被调用两次。

0 个答案:

没有答案