Java 根据实际代码名计算首选高度';s组件宽度(2)

Java 根据实际代码名计算首选高度';s组件宽度(2),java,codenameone,Java,Codenameone,目前,我正在创建一个代号为one的组件,其高度取决于宽度。Codename one(Shai Almog)回答说,这不容易做到,布局算法不打算处理这一需求。请看这里的原始问题。有人建议在Codename oneTextArea组件中使用这种方法,但显然这种方法本身并非没有问题 不,我想用另一种方法来解决这个问题。我想知道人们是否可以就这是否有效给出反馈。基本思想是假设表单组件作为层次结构中的最高组件,其宽度和高度不依赖于布局管理器,而是直接依赖于显示器。因此具有固定的尺寸。表单有一个子容器con

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

不,我想用另一种方法来解决这个问题。我想知道人们是否可以就这是否有效给出反馈。基本思想是假设
表单
组件作为层次结构中的最高组件,其宽度和高度不依赖于布局管理器,而是直接依赖于显示器。因此具有固定的尺寸。表单有一个子
容器
contentPane,我假设它也有固定大小。然后我们可以创建一个自定义的
LayoutManager
来使用这些信息。假设我们从一个
BoxLayout
扩展并重载其方法
layoutcainer(Container c)
getPreferredSize(Container c)
来使用此信息,使用
c.getParent().getParent()instanceof Form
来了解宽度和高度(根据具体情况,为自定义可调整大小的组件创建方法,例如
GetPreferedForHeight(int-height)
或初始化方法
setFixedWidth(int-width)
,该方法会影响通常的
GetPreferredh()
GetPreferredw()
调用

最好是使用方法扩展组件,例如
hasFixedWidth()
(或者在一个调用中组合宽度和高度
hasFixedDimension(int轴)
)和
widthDependsOnHeight()
这将使
BoxLayout
独立于硬编码的类名,但它看起来不能像使用

UIBuilder.registerCustomComponent("Container", nl.localhost.Container.class);
UIBuilder.registerCustomComponent("Form", nl.localhost.Form.class);
似乎没有效果

我没有考虑过滚动或旋转设备(从而重新绘制表单),但我认为这不会带来问题。上述方法有效吗


最好的祝愿Marc K

我们在组件中经常做的是将其首选宽度设置为
Display.getInstance().getWidth()
,这会向布局管理器提示我们的意图

旋转设备时,将再次调用
calcPreferredSize()
,显示宽度将为物理设备高度


您使用的注册码与旧的GUI生成器相关。我不明白为什么它与当前的问题相关。

我们在组件中经常做的是将它们的首选宽度设置为
Display.getInstance().getWidth()
,这会向布局管理器提示我们的意图

旋转设备时,将再次调用
calcPreferredSize()
,显示宽度将为物理设备高度


您使用的注册码与旧的GUI生成器相关。我不太明白为什么它与手头的问题相关。

可能。为什么不试试?可能。为什么不试试?好吧,那么再次使用
calcPreferredSize()
。感谢
Display.getInstance().getWidth()Display.getInstance().getWidth()
tip,这应该是足够的信息来完成。Marc K。好的,再次使用
calcPreferredSize()
。感谢
Display.getInstance().getWidth()Display.getInstance().getWidth()
tip,这应该是足够的信息来完成。Marc K。