Frage

Ich habe eine Klasse basierend auf Composite, die eine SWT List Instanz einbettet. Mit den Standardeinstellungen ist die Liste fünf Reihen hoch auf meinem WinXP-System. Ohne sich hart codierte Pixelwerte oder DPI Einstellungen und dergleichen, wie kann ich die Höhe der Liste gesetzt (und die umgebende composite) auf eine feste Anzahl von Zeilen, sagen wir 3, ohne Zusatz inneren Ränder?

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

    setLayout(new FillLayout());

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

    ...
}

Update:

Die folgenden Werke, aber es hat nicht berücksichtigt, um die Höhe von der Grenze gegeben, die in Teilen der letzten Zeile ergibt abgedeckt. Irgendwelche Ideen, wie diese zu berechnen, auch?

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);
}
War es hilfreich?

Lösung

Können Sie nicht list.getBorderWidth () und list.getItemHeight (), um die Höhe zu bekommen?

Andere Tipps

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top