Come impostare l'altezza dell'elenco SWT in righe?
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);
}
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