¿Cómo establecer la altura de la lista SWT en filas?
Pregunta
Tengo una clase basada en Composite
que incorpora una instancia SWT List
. Usando la configuración predeterminada, la lista tiene cinco filas de altura en mi sistema WinXP. Sin depender de valores de píxeles codificados o configuraciones de DPI y similares, ¿cómo puedo establecer la altura de la lista (y el compuesto circundante) en un número fijo de filas, digamos 3, sin ningún margen interno agregado?
public FileSetBox(Composite parent, int style)
{
super(parent, style);
setLayout(new FillLayout());
this.list = new List(this, SWT.V_SCROLL);
...
}
Actualización :
Lo siguiente funciona, pero no tiene en cuenta la altura agregada por el borde, lo que da como resultado que se cubran partes de la última línea. ¿Alguna idea de cómo calcular esto también?
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);
}
Solución
¿No puedes usar list.getBorderWidth () y list.getItemHeight () para obtener la altura?
Otros consejos
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(); }