我正在向VerticalFieldManager添加字段。有没有在字段之间添加垂直间距的方法?
答案 0 :(得分:6)
有几个解决方案,一个是你可以创建一个自定义字段作为其他字段之间的间隔。
private static class SpacerField extends Field
{
private int spacerWidth;
private int spacerHeight;
private SpacerField(int width, int height) {
spacerWidth = width;
spacerHeight = height;
}
protected void layout(int width, int height) {
setExtent(getPreferredWidth(), getPreferredHeight());
}
protected void paint(Graphics g) {
// nothing to paint; this is a blank field
}
public int getPreferredHeight() {
return spacerHeight;
}
public int getPreferredWidth() {
return spacerWidth;
}
}
//...
// Usage
add(new LabelField("Before Spacer"));
add(new SpacerField(0, 100));
add(new LabelField("After Spacer"));
设置包含字段的填充或边距是另一种解决方案。这取决于您认为管理事物的最佳方式。
答案 1 :(得分:3)
使用setPositionChild()
方法执行此操作有更多方法,但一个简单的解决方法是使用setPadding(int top, int right, int bottom, int left)方法填充字段。
myField.setPadding(5, 0, 5, 0);
答案 2 :(得分:1)
我实际上发现,大多数情况下,您想要做的是在垂直字段管理器的子字段上调用setMargin()
,不 sePadding()
。我当然认为creating a SpacerField现在不必要地复杂了。
myField.setMargin(5, 0, 5, 0);
这取决于我们正在讨论哪种儿童字段,以及如何指定其大小,但一般来说,setPadding()
实际上会使字段更大,这可能会产生视觉影响,具体取决于如何绘制了该字段的背景和边框。 setMargin()
不会使字段更大,我认为这与问题的内容更为一致。
See Mr Vincenzo's answer here, with pictures!
注意: setMargin()
和setPadding()
在BlackBerry Java evolution中相对较晚地正式添加到Field
API,但在此之前作为未记录的方法提供
另一个注意事项:我在使用setMargin()
时遇到了奇怪的问题,例如one described in this question。在这种情况下,我确实不得不求助于其他两个解决方案之一。