Question

J'ai une classe basée sur Composite qui incorpore une instance SWT List . En utilisant les paramètres par défaut, la liste est haute de cinq lignes sur mon système WinXP. Sans compter sur les valeurs de pixels codées en dur, les paramètres DPI, etc., comment puis-je définir la hauteur de la liste (et du composite environnant) sur un nombre fixe de lignes, par exemple 3, sans aucune marge intérieure ajoutée?

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

    setLayout(new FillLayout());

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

    ...
}

Mise à jour:

Les travaux suivants fonctionnent, mais ils ne prennent pas en compte la hauteur ajoutée par la bordure, ce qui a pour effet de couvrir des parties de la dernière ligne. Des idées pour calculer cela aussi?

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);
}
Était-ce utile?

La solution

Ne pouvez-vous pas utiliser list.getBorderWidth () et list.getItemHeight () pour obtenir la hauteur?

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top