Добавить вертикальный интервал между полями в VerticalFieldManager - PullRequest
1 голос
/ 23 февраля 2011

Я добавляю поля в VerticalFieldManager.Есть ли способ добавления вертикального расстояния между полями?

Ответы [ 3 ]

6 голосов
/ 23 февраля 2011

Для этого есть несколько решений, одно из которых заключается в том, что вы можете создать настраиваемое поле, которое будет использоваться в качестве разделителя между вашими другими полями.

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"));

Установка отступов или полей содержащихся в них полей является еще одним решением.Вам решать, что, по вашему мнению, является лучшим способом управления вещами.

3 голосов
/ 23 февраля 2011

Существуют более элогичные способы сделать это, используя методы setPositionChild(), но простой способ обойти это - заполнить поля, используя setPadding (int top, int right, int bottom, int left) Метод.

myField.setPadding(5, 0, 5, 0);
1 голос
/ 16 февраля 2013

На самом деле я нахожу, что в большинстве случаев вам нужно вызывать setMargin() в дочерних полях менеджера вертикальных полей, , а не sePadding(). Я, конечно, думаю, создание SpacerField теперь неоправданно сложно.

myField.setMargin(5, 0, 5, 0);

Это зависит от того, о каком типе дочернего поля мы говорим и как указан его размер, но в целом setPadding() фактически увеличит поле, что может иметь визуальный эффект, в зависимости от того, как поле фон и границы нарисованы. setMargin() не делает поле больше, что, я думаю, более соответствует тому, что задает вопрос.

См. Ответ мистера Винченцо здесь, с картинками!

Примечание: setMargin() и setPadding() были официально добавлены в API Field относительно поздно в эволюции BlackBerry Java, но до этого были доступны как недокументированные методы.

Другое примечание: Я видел странные проблемы при использовании setMargin(), такие как , описанный в этом вопросе . В этом случае мне пришлось прибегнуть к одному из двух других решений здесь.

...