Comment définir la hauteur de la liste SWT en lignes?
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);
}
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(); }