Domanda

Ho una classe basata su Composite che incorpora un'istanza SWT List . Utilizzando le impostazioni predefinite, l'elenco è alto cinque righe sul mio sistema WinXP. Senza fare affidamento su valori di pixel hardcoded o impostazioni DPI e simili, come posso impostare l'altezza dell'elenco (e il composito circostante) su un numero fisso di righe, diciamo 3, senza alcun margine interno aggiunto?

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

    setLayout(new FillLayout());

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

    ...
}

Aggiornamento:

Il seguente funziona, ma non tiene conto dell'altezza aggiunta dal bordo, il che comporta la copertura di parti dell'ultima linea. Qualche idea su come calcolare anche questo?

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);
}
È stato utile?

Soluzione

Non puoi usare list.getBorderWidth () e list.getItemHeight () per ottenere l'altezza?

Altri suggerimenti

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top