目前我正在创建一个代号为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
独立在硬编码的类名称上,但看起来无法使用
UIBuilder.registerCustomComponent("Container", nl.localhost.Container.class);
UIBuilder.registerCustomComponent("Form", nl.localhost.Form.class);
似乎没有效果。
我还没有考虑滚动或旋转设备(因此重新绘制表格),但我认为它不会产生问题。上述方法是否有效?
祝Marc K
答案 0 :(得分:0)
我们在组件中经常做的是将他们的首选宽度设置为Display.getInstance().getWidth()
,其中提示"提示"布局经理关于我们的意图。
当设备旋转时,再次调用calcPreferredSize()
并且显示宽度将是物理设备高度。
您使用的注册码与旧的GUI构建器相关。我不确切地知道为什么它与手头的问题有关。