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);
}
¿Fue útil?

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();
    }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top