2015-11-19 48 views
0

我正在创建具有可变大小的自定义Codenameone组件。该组件显示固定数量的文本,跨越多行。因此宽度和高度是相关的。如果宽度较小,则文本适合一行,并且需要更多行。我已设法设置首选宽度和首选高度。麻烦的是,当实际的绘画发生时,宽度显然是由图形对象graphics.getClipWidth()给出的,并且不符合我的首选宽度。因此,我的首选高度(在绘画时看起来等于graphics.getClipHeight())不正确,因为剪辑宽度不等于我的首选宽度,该宽度用于计算首选高度。我怎样才能得到graphics.getClipHeight()有正确的身高?换句话说,是否可以使用组件在渲染时实际具有的宽度来指定组件的高度?根据实际的Codenameone的组件宽度计算首选高度

祝 马克ķ

回答

0

这是我们必须与TextArea确切的问题,恐怕没有简单的答案。例如。如果组件提供了X的首选大小,布局管理器可能会决定分配不同大小,因此需要不同的布局。

这是我们在构建Codename One时做出的有意识的设计选择,为了实现这一目标,您需要有效递归重排,重新计算大小/维度,直到您获得最佳结果。这些算法在定义上很慢并且难以进行基准测试(因为很难预测回流在具有不同字体,填充等的设备上的表现如何)。

TextArea我们有一个“穷人回流”,如果宽度看起来不正确,会触发重新验证。这已成为TextArea中许多问题的来源。

您可以在TextArea source中看到此内容,请搜索setShouldCalcPreferredSize调用。

+0

感谢您的快速回复。根据getWidth()是否被设置(即返回一个不等于0的值),getPreferredH()会返回不同的值吗?它似乎在BoxLayout-Y中工作。另一种方法是使用屏幕宽度来估计高度 - 听起来很脆弱。 –

+0

这不是正确的工作方式。你通常应该重载calcPreferredSize(),在这种情况下,它应该返回不同的值。 –

+0

好吧,我会尝试一下。 –