2009-06-17 4 views
4

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 des valeurs de pixels codées en dur ou des paramètres DPI et similaires, comment puis-je définir la hauteur de la liste (et le composite environnant) à un nombre fixe de lignes, disons 3, sans aucune marge intérieure ajoutée?Comment définir la hauteur de la liste SWT en lignes?

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, mais il ne prend pas en compte la hauteur ajoutée par la frontière, ce qui se traduit dans certaines parties de la dernière ligne étant couvert. 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); 
} 

Répondre

4

Tu ne peux pas utiliser list.getBorderWidth() et list.getItemHeight() pour obtenir la hauteur?

+0

Stupide moi ... c'était si évident que je l'ai négligé. Merci beaucoup :-) –

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

Questions connexes