根据实际的Codenameone组件宽度计算首选高度(2)

时间:2015-12-01 15:40:23

标签: java codenameone

目前我正在创建一个代号为one的组件,其高度取决于宽度。 Codename one(Shai Almog)回答说这不容易做,布局算法并不打算处理这个要求。在这里查看原始问题。有人建议在Codename one TextArea组件中使用该方法,但显然这种方法本身并非没有问题。

不,我想通过不同的方法来解决这个问题。我想知道人们是否可以就这是否有效给出反馈。基本思想是假设Form组件的宽度和高度,作为层次结构中的最高组件,不依赖于布局管理器,而是直接在显示器上。因而具有固定的尺寸。表单中有一个子Container contentPane,我假设它也有固定的大小。然后我们可以创建自定义LayoutManager来使用此信息。假设我们从BoxLayout延伸并重载其方法layoutContainer(Container c)getPreferredSize(Container c)以使用此信息,使用c.getParent().getParent() instanceof Form来了解宽度和高度(取决于自定义可调整大小的组件创建方法)例如getPrefferedWForHeight(int height)或影响常规setFixedWidth(int width)getPrefferredH()来电的初始化方法getPrefferredW()

最好的方法是使用hasFixedWidth()等方法扩展组件(或者在一个调用hasFixedDimension(int axis)中组合宽度和高度)和widthDependsOnHeight()以使BoxLayout独立在硬编码的类名称上,但看起来无法使用

替换Codename一个组件
UIBuilder.registerCustomComponent("Container", nl.localhost.Container.class);
UIBuilder.registerCustomComponent("Form", nl.localhost.Form.class);

似乎没有效果。

我还没有考虑滚动或旋转设备(因此重新绘制表格),但我认为它不会产生问题。上述方法是否有效?

祝Marc K

1 个答案:

答案 0 :(得分:0)

我们在组件中经常做的是将他们的首选宽度设置为Display.getInstance().getWidth(),其中提示"提示"布局经理关于我们的意图。

当设备旋转时,再次调用calcPreferredSize()并且显示宽度将是物理设备高度。

您使用的注册码与旧的GUI构建器相关。我不确切地知道为什么它与手头的问题有关。