我继续创建自己的Button组件,重写paintBackground(Graphics g)
方法,使用按钮显示一些圆形图表。期望结果的例子:
我最终得到的结果非常接近,但并不完全是:图标和图标下面的文字之间的空间太大,文本本身已经触及了圆圈。
查看Label API,有方法setGap(int)
。由于默认情况下间隙为0,因此我使用了负值,以使它们更接近。这会按预期移除空间,但会产生副作用:应用任何间隙值时,标签和图标的位置都会关闭。间隙值也会影响X值,而不仅仅影响标签和图标的Y值。
经过大量挖掘,我在CN1本身的代码库中发现了一个错误。在类drawLabelComponent()
的CodenameOneImplementation
方法中,有以下片段(对齐中心和文本底部,第7254行):
case Label.BOTTOM:
case Label.TOP:
x = x + (cmpWidth - (preserveSpaceForState + leftPadding
+ rightPadding
+ Math.max(((icon != null) ? iconWidth + gap : 0),
stringWidth))) / 2;
x = Math.max(x, cmpX + leftPadding + preserveSpaceForState);
y = y + (cmpHeight - (topPadding
+ bottomPadding
+ ((icon != null) ? iconHeight + gap : 0)
+ fontHeight)) / 2;
break;
很明显,间隙变量包含在X和Y值的计算中,对于在底部和顶部文本位置情况下设置图标和文本之间的间隙,这不是真的。
查看左右文本位置的情况,gap变量仅用于X计算,不用于Y计算。
如果这实际上是预期的行为,有人请赐教我如何在不影响文本和图标的X位置的情况下摆脱差距。
谢谢。
这似乎是一个错误,我们将解决它。请注意,差距不是针对负值设计的,所以如果它失败了,那么它不一定是个bug。