在VerticalFieldManager上的字段之间添加垂直间距

时间:2011-02-23 14:25:15

标签: blackberry java-me

我正在向VerticalFieldManager添加字段。有没有在字段之间添加垂直间距的方法?

3 个答案:

答案 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。在这种情况下,我确实不得不求助于其他两个解决方案之一。