Как установить высоту списка SWT в строках? - PullRequest
4 голосов
/ 17 июня 2009

У меня есть класс на основе Composite, который встраивает экземпляр SWT List. Используя настройки по умолчанию, список в моей системе WinXP занимает пять строк. Не полагаясь на жестко заданные значения пикселей или настройки DPI и т. П., Как я могу установить высоту списка (и окружающего композита) равным фиксированному числу строк, скажем, 3, без каких-либо добавленных внутренних полей?

public FileSetBox(Composite parent, int style)
{
    super(parent, style);

    setLayout(new FillLayout());

    this.list = new List(this, SWT.V_SCROLL);

    ...
}

Обновление:

Следующее работает, но оно не учитывает высоту, добавленную границей, что приводит к тому, что части последней строки покрываются. Есть идеи как рассчитать это тоже?

public FileSetBox(Composite parent, int style)
{
    ...
    GC gc = new GC(this);
    gc.setFont(this.list.getFont());
    this.preferredHeight = gc.getFontMetrics().getHeight() * 3;
    gc.dispose();
    ...
}

@Override
public Point computeSize(int arg0, int arg1)
{
    Point size = super.computeSize(arg0, arg1);
    return new Point(size.x, this.preferredHeight);
}

Ответы [ 2 ]

4 голосов
/ 17 июня 2009

Разве вы не можете использовать list.getBorderWidth () и list.getItemHeight () для получения высоты?

1 голос
/ 17 июля 2009
public FileSetBox(Composite parent, int style)
{
    super(parent, style);

    setLayout(new GridLayout(1, false));

    this.list = new List(this, SWT.V_SCROLL);

    GridData data = new GridData(GridData.FILL_BOTH);
    data.heightHint = 10 * ((List)control).getItemHeight(); // height for 10 rows
    data.widthHint = getStringWidth(25, list); // width enough to display 25 chars
    list.setLayoutData(data);

    ...
}

    public static int getStringWidth(int nChars, Control control){
        GC gc = new GC(control);
        gc.setFont(control.getFont());
        FontMetrics fontMetrics = gc.getFontMetrics();
        gc.dispose();
        return nChars * fontMetrics.getAverageCharWidth();
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...