Jface: пользовательский неверный макет FieldEditor - PullRequest
0 голосов
/ 01 декабря 2011

Я хотел бы создать настраиваемый FieldEditor для страницы настроек.цель состоит в том, чтобы переопределить ScaleFieldEditor, чтобы предоставить Scale две метки над ним (одна для отображения минимального значения, другая для отображения максимального).

Он был создан.Это работает, но компоновка не подходит, когда я добавляю FileFieldeditor на страницу настроек.

Еще хуже, если я добавлю FileFieldEditor сразу после пользовательского ScaleFieldEditor: http://imageshack.us/g/844/customscalelayoutok.png/ (Извините, я не могу добавитьизображения к этому сообщению).

Я сделал Composite, который содержит 2 метки и шкалу.Я использовал GridLayout:

public class ScaleWithLabelFieldEditor extends ScaleFieldEditor {

/**
 * The maximum value label
 */
private Label maxLabel;
/**
 * The minimum value label
 */
private Label minLabel;
/**
 * A composite that contains the scale and the min & max values label
 */
private Composite controls;

public ScaleWithLabelFieldEditor(String name, String labelText,
        Composite parent) {
    super(name, labelText, parent);
}

public ScaleWithLabelFieldEditor(String name, String labelText,
        Composite parent, int min, int max, int increment, int pageIncrement) {
    super(name, labelText, parent, min, max, increment, pageIncrement);
}

@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {
    Control labelControl = getLabelControl(parent);
    GridData gd = new GridData();
    labelControl.setLayoutData(gd);

    controls = getControls(parent, 2);
    gd = new GridData(GridData.FILL_HORIZONTAL);
    gd.horizontalSpan = numColumns -1;
    gd.grabExcessHorizontalSpace = true;
    controls.setLayoutData(gd);
    updateControls();
    parent.layout();
}

/**
 * Initialize (if not done yet) the controls composite
 * 
 * @param parent
 *            the parent composite
 * @return the controls composite that contains the scaler and the min/max
 *         labels
 */
protected Composite getControls(Composite parent, int numColumns) {
    if (controls == null) {
        controls = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout(numColumns, false);
        layout.numColumns = numColumns;
        controls.setLayout(layout);

        // Initialize the min value label
        minLabel = getMinLabel(controls);
        minLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));
        // Initialize the max value label
        maxLabel = getMaxLabel(controls);
        maxLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false));
        // Initialize the scale
        scale = getScale(controls);
        scale.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, false, numColumns, 1));

    }
    return controls;
}

/**
 * Nothing to do, already handle with controls composite
 */
@Override
protected void adjustForNumColumns(int numColumns) {
    // Nothing to do, already handle with controls composite
}

/**
 * Update the scale and the labels above
 */
protected void updateControls() {
    if (controls != null && !controls.isDisposed()) {
        // Update scale
        scale.setMinimum(getMinimum());
        scale.setMaximum(getMaximum());
        scale.setIncrement(getIncrement());
        scale.setPageIncrement(getPageIncrement());
        // Update labels
        maxLabel.setText(Integer.toString(getMaximum()));
        minLabel.setText(Integer.toString(getMinimum()));
    }
}

Что я должен сделать, чтобы этот макет поля работал?Я что-то пропустил при использовании GridLayout / GridData?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

Кажется, проблема в том, что вы не реализовали метод adjustForNumColumns(int numColumns). Когда вы добавляете FileFieldEditor, количество столбцов меняется с 2 на 3. И ваш полевой редактор должен адаптироваться к тому, чего в настоящее время нет.

0 голосов
/ 01 декабря 2011

Кажется, что горизонтальный диапазон не охватывает до конца? Так что, может быть, вы должны попытаться удалить -1 в gd.horizontSpan = numColumns -1;

...