Как задать высоту списка SWT в строках?
Вопрос
У меня есть класс, основанный на 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);
}
Решение
Разве вы не можете использовать list.getBorderWidth() и list.getItemHeight(), чтобы получить высоту?
Другие советы
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(); }
Не связан с StackOverflow